Python模块导入-显式和隐式相对导入

威廉

昨晚,在Mac上工作时,我在__init__.py

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'

我的项目布局是


| _modules
  | _api_helpers
    | __init__.py
    | InvalidUsage.py
    | response_utils.py
  | _backend_providers
    | __init__.py
    | MongoProvider.py
    | Settings.py
  | _route_handlers
    | __init__.py
    | Route_Handlers
| app.py

有什么想法会导致这种情况吗?是否有我应该查看的配置文件?

保罗这

好吧,根据PEP-8进口部分:

绝对不要使用隐式相对导入,并且在Python 3中已将其删除。

由于Python 3.3会给您带来麻烦,从而使您显式导入亲戚模块,因此我认为这可以解释这种情况。可能是因为在Mac上安装了Python 2.x,这就是它在那里工作的原因。

查看您项目的文件分发,Settings.py并且MongoProvider确实是相关模块。这意味着在Python 3中删除隐式相对导入是一种麻烦,因为导入系统无法找到该模块:

ImportError: No module named 'MongoProvider'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章