[英]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.py
和MongoProvider
確實是相關模塊。 這意味着在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.