昨晚,在我的Mac上工作时,我在__init__.py
的<{p>}中设置了一些模块导入
from MongoProvider import MongoProvider
from Settings import Settings
等。我不确定该机器上的Python版本。一旦我拥有了该信息,我将稍后编辑该问题。
今天,在Windows和使用Python 3.3.3的不同机器上工作,我的模块导入正在破坏。通过添加显式相对导入(添加一个前导点),我能够解决问题。
from .MongoProvider import MongoProvider
from .Settings import Settings
我收到的踪迹是:
Traceback (most recent call last):
File "app.py", line 5, in <module> from modules.route_handlers import Route_Handlers
File "C:\Users\willb\bearded-dubstep\modules\route_handlers\Route_Handlers.py", line 9, in <module> from modules.backend_providers import Settings
File "C:\Users\willb\bearded-dubstep\modules\backend_providers\__init__.py", line 1, in <module> from MongoProvider import MongoProvider
ImportError: No module named 'MongoProvider'
我的项目布局
任何想法会导致什么?我应该看一下配置文件吗?
答案 0 :(得分:9)
嗯,根据PEP-8导入部分:
永远不应该使用隐式相对导入,并且已在Python 3中删除。
由于Python 3.3是导致你麻烦的那个,让你明确导入亲戚模块,我认为这解释了这种情况。可能在Mac上你有Python 2.x,这就是它在那里工作的原因。
查看项目的文件分布,Settings.py
和MongoProvider
确实是相关模块。这意味着在Python 3中删除隐式相对导入会导致您遇到麻烦,因为导入系统无法找到该模块:
ImportError: No module named 'MongoProvider'
答案 1 :(得分:2)
似乎Mac上的Python版本是2.x而Windows上的Python是3.x。
在使用模块tkinter(在Python 2.x中是Tkinter)之前我遇到了同样的问题。
似乎我们需要使用从XXX.xxx导入xxx导入...●﹏●
我不知道为什么,也许是设计师正在适应Python。