簡體   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