擅长:python、mysql、java
<p>他们已经有很多帖子了,但对我来说这仍然是一件棘手的事情</p>
<p>所以,尽管我仍然不确定什么是最佳实践,但无论如何,这里是我如何处理这个问题的</p>
<p>在要进行导入的模块中,添加</p>
<pre><code>import sys
import os
sys.path.append(os.path.join(sys.path[0], '..'))
</code></pre>
<p><code>sys.path[0]</code>是模块的绝对路径,不带文件名。当模块是和不是顶级脚本时,它都可以工作。如果您不知道什么是顶级脚本以及它与导入机制的关系如何,<a href="https://stackoverflow.com/a/14132912/15909723">read this</a></p>
<p><code>os.path.join</code>可能用于处理系统差异。无论如何,<code>os.path.join(sys.path[0], '..')</code>将指向父路径</p>
<p><code>sys.path.append</code>将父路径添加到搜索空间</p>
<p>因此,在您的例子中,将前面的代码添加到<code>importio.py</code>,然后您就可以执行以下操作了</p>
<pre><code>from nopop import loggio
import poppy
</code></pre>
<p>在<code>importio.py</code>中也是如此</p>
<p><code>__init__.py</code>在该解决方案中根本不使用。你可以删除它们。
但我见过许多回购协议使用<code>__init__.py</code>。因此,最佳实践可能包括使用它们</p>