擅长:python、mysql、java
<p>原因是您的<code>MyPackage/__init__.py</code>是从当前工作目录运行的。E、 在这种情况下,从<code>WorkingDirectory</code>开始。这意味着,解释器找不到名为<code>module1</code>的模块,因为它不在当前或全局包目录中。</p>
<p>对此几乎没有解决办法。例如,可以临时重写当前工作目录,如下所示</p>
<pre><code>cwd = os.getcwd()
csd = __path__[0]
os.chdir(csd)
</code></pre>
<p>然后,在像<code>import module1</code>这样的所有包初始化操作完成之后,使用<code>os.chdir(cwd)</code>还原“调用者”的工作目录。</p>
<p>对我来说,这是一个相当糟糕的方法,因为,例如,如果初始化操作引发异常,则不会还原工作目录。您需要使用<code>try..except</code>语句来修复此问题。</p>
<p>另一种方法是使用相对进口。有关详细信息,请参阅<a href="https://docs.python.org/3/tutorial/modules.html#intra-package-references" rel="nofollow noreferrer">documentation</a>。</p>
<p>下面是一个<code>MyPackage/__init__.py</code>的示例,它将适用于您的示例:</p>
<pre><code>from .module1 import *
</code></pre>
<p>但它几乎没有什么缺点,而这些缺点是根据经验通过文献发现的。例如,您不能编写类似<code>import .module1</code>的内容。</p>
<hr/>
<p><strong>升级版:</strong>
我发现即使从通常的python控制台运行<code>import MyPackage</code>,也会引发此异常。不是从IPython或Jupyter笔记本。所以这似乎不是一个伊普顿本身的问题。</p>