繁体   English   中英

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

[英]Python Module Imports - Explicit vs Implicit Relative Imports

昨晚,在我的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.pyMongoProvider确实是相关模块。 这意味着在Python 3中删除隐式相对导入会导致您遇到麻烦,因为导入系统无法找到该模块:

ImportError: No module named 'MongoProvider'

看来mac上的Python版本是2.x而Windows上的Python是3.x.

在使用模块tkinter(在Python 2.x中为Tkinter)之前,我遇到了同样的问题。

看来我们需要使用从XXX.xxx导入xxx导入...●﹏●

我不知道为什么,也许是设计师适应Python。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM