2013-12-20 81 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的調整。