擅长:python、mysql、java
<p>我遇到了类似的情况,OP关于名称空间冲突的回答最终让我明白了这一点</p>
<p>我对其中的一个子包(目录)和一个模块(文件)使用了相同的名称</p>
<p>例如,我有:</p>
<pre><code>/opt/mylib/myapi
/opt/mylib/myapi/__init__.py
/opt/mylib/myapi/myapi_creds.py # gitignored file for user/pass
/opt/mylib/myapi/myapi.py # base module, load creds and connect
/opt/mylib/myapi/myapi_dostuff.py # call myapi.py and do work
</code></pre>
<p>脚本“myapi.py”通过以下语句从myapi_creds.py导入凭据:</p>
<pre><code>from myapi.myapi_creds import my_user, my_pass
</code></pre>
<p>测试模块“myapi.py”导致以下错误:</p>
<pre><code>$ ./myapi.py
Traceback (most recent call last):
File "./myapi.py", line 12, in <module>
from myapi.myapi_creds import my_user, my_pass
File "/opt/mylib/myapi/myapi.py", line 12, in <module>
from myapi.myapi_creds import my_user, my_pass
ModuleNotFoundError: No module named 'myapi.myapi_creds'; 'myapi' is not a package
</code></pre>
<p>解决方案是将<code>myapi.py</code>重命名为<code>myapi_base.py</code>,这样它的名称就不会与子包名称冲突</p>