2013-12-20 79 views
11

昨晚,我的Mac上工作时,我设置了一些模块导入我__init__.pyPython模块导入 - 明确VS隐相对导入

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

任何想法会导致这种情况?有没有我应该看的配置文件?

+0

什么Python版本是什么? –

+0

Windows正在使用3.3.3。我不确定我的Mac上有什么。无论现在运送什么货物。 – William

+0

你能提供更多信息吗?像Windows中的例外情况一样?你是项目的文件格式,等等? –

回答

7

那么,根据PEP-8进口部分:

隐相对进口不应该被使用,并在Python已被删除3.

对于Python 3.3是一个造成你的麻烦,使你明确的进口亲属模块,我假设这解释了这种情况。这可能是在Mac上你有Python 2.x,这就是为什么它在那里工作。

看着你的项目的文件分布,Settings.pyMongoProvider确实是相对的模块。这意味着,在Python 3去除隐含的相对进口是一个给你造成麻烦,因为导入系统无法找到该模块:

ImportError: No module named 'MongoProvider' 
2

看来你的Mac上的Python版本是2.x,而你的Windows上的Python是3.x.

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

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

我不知道为什么,也许这是设计师对Python的调整。