<p>使用单个导入时,您遇到的实际问题是由于<a href="http://docs.python.org/2/tutorial/modules.html#packages" rel="noreferrer">packages</a>的优先级高于模块:</p>
<blockquote>
<p>Note that when using <code>from package import item</code>, the item can be either
a submodule (or subpackage) of the package, or some other name defined
in the package, like a function, class or variable. The <code>import</code>
statement first tests whether the item is defined in the package; if
not, it assumes it is a module and attempts to load it. If it fails to
find it, an <code>ImportError</code> exception is raised.</p>
</blockquote>
<p>无论如何,我建议重命名文件或目录,因为您不能用给定的名称导入多个模块。出现此问题的原因是每个模块/包对象都存储在<code>sys.modules</code>中,这是一个简单的<code>dict</code>,因此不能包含多个相等的键。</p>
<p>特别是,假设<code>foo.py</code>和<code>foo</code>目录位于不同的目录中(如果它们不在,则仍然无法导入<code>foo.py</code>),执行以下操作时:</p>
<pre><code>from foo import gaz
</code></pre>
<p>它将加载<code>foo.py</code>,并将模块放入<code>sys.modules</code>,然后尝试执行以下操作:</p>
<pre><code>from foo.bar import wakaka
</code></pre>
<p>将失败,因为导入尝试使用模块<code>foo.py</code>而不是包。</p>
<p>如果您首先导入<code>foo.bar</code>,则会发生相反的情况;导入将使用包而不是模块。</p>