<p>在python3中查看:</p>
<pre><code>python -V
Python 3.6.5
</code></pre>
<p><strong>示例1:</strong></p>
<pre><code>.
├── parent.py
├── start.py
└── sub
└── relative.py
- start.py
import sub.relative
- parent.py
print('Hello from parent.py')
- sub/relative.py
from .. import parent
</code></pre>
<p>如果我们这样运行(只是为了确保PYTHONPATH是空的):</p>
<pre><code>PYTHONPATH='' python3 start.py
</code></pre>
<p>输出:</p>
<pre><code>Traceback (most recent call last):
File "start.py", line 1, in <module>
import sub.relative
File "/python-import-examples/so-example-v1/sub/relative.py", line 1, in <module>
from .. import parent
ValueError: attempted relative import beyond top-level package
</code></pre>
<p>如果我们在<code>sub/relative.py</code>中更改导入</p>
<pre><code>- sub/relative.py
import parent
</code></pre>
<p>如果我们这样运行:</p>
<pre><code>PYTHONPATH='' python3 start.py
</code></pre>
<p>输出:</p>
<pre><code>Hello from parent.py
</code></pre>
<p><strong>示例2:</strong></p>
<pre><code>.
├── parent.py
└── sub
├── relative.py
└── start.py
- parent.py
print('Hello from parent.py')
- sub/relative.py
print('Hello from relative.py')
- sub/start.py
import relative
from .. import parent
</code></pre>
<p>运行方式:</p>
<pre><code>PYTHONPATH='' python3 sub/start.py
</code></pre>
<p>输出:</p>
<pre><code>Hello from relative.py
Traceback (most recent call last):
File "sub/start.py", line 2, in <module>
from .. import parent
ValueError: attempted relative import beyond top-level package
</code></pre>
<p>如果我们在<code>sub/start.py</code>中更改导入:</p>
<pre><code>- sub/start.py
import relative
import parent
</code></pre>
<p>运行方式:</p>
<pre><code>PYTHONPATH='' python3 sub/start.py
</code></pre>
<p>输出:</p>
<pre><code>Hello from relative.py
Traceback (most recent call last):
File "sub/start.py", line 3, in <module>
import parent
ModuleNotFoundError: No module named 'parent'
</code></pre>
<p>运行方式:</p>
<pre><code>PYTHONPATH='.' python3 sub/start.py
</code></pre>
<p>输出:</p>
<pre><code>Hello from relative.py
Hello from parent.py
</code></pre>
<p>另外,最好使用从根文件夹导入,即:</p>
<pre><code>- sub/start.py
import sub.relative
import parent
</code></pre>
<p>运行方式:</p>
<pre><code>PYTHONPATH='.' python3 sub/start.py
</code></pre>
<p>输出:</p>
<pre><code>Hello from relative.py
Hello from parent.py
</code></pre>