<p>相对导入基于当前模块的名称。跑步时</p>
<pre class="lang-sh prettyprint-override"><code>python fff/obng/test.py
</code></pre>
<p>test.py的名称将为<code>__main__</code>,导入将不起作用</p>
<p>有效的方法是在导入fff.obng.test的fff模块外部使用另一个名为“test.py”的脚本</p>
<pre><code>fff_top
├── fff
│ ├── fg
│ │ ├── __init__.py
│ │ └── settings
│ │ ├── __init__.py
│ │ └── settings.py
│ ├── __init__.py
│ └── obng
│ ├── __init__.py
│ └── test.py
└── test.py
</code></pre>
<p>使用fff_top/test.py:</p>
<pre class="lang-py prettyprint-override"><code>import fff.obng.test
</code></pre>
<p>然后,运行“external”test.py应该可以:</p>
<pre class="lang-sh prettyprint-override"><code>python fft_top/test.py
</code></pre>
<p>或者,我建议完全放弃相对进口。一种方法是为您编写的每个包使用虚拟环境,例如使用<a href="https://docs.python.org/3/library/venv.html" rel="nofollow noreferrer">venv</a>库:</p>
<pre><code>python -m venv venv
</code></pre>
<p>然后,在根文件夹中添加setup.py,内容如下:</p>
<pre class="lang-py prettyprint-override"><code>from setuptools import setup, find_packages
setup(name="fff", packages=find_packages())
</code></pre>
<p>并更改<code>obng/test.py</code>中的导入:</p>
<pre class="lang-py prettyprint-override"><code>from fff.fg.settings import settings
</code></pre>
<p>最后,激活您的虚拟环境:</p>
<pre><code>source venv/bin/activate
</code></pre>
<p>并以可编辑模式安装软件包:</p>
<pre><code>pip install -e .
</code></pre>
<p>然后,在完成上述所有步骤后:</p>
<pre class="lang-sh prettyprint-override"><code>python fff/obng/test.py
</code></pre>
<p>应该有用</p>