[英]Python absolute import in module fails
我有一個看起來像這樣的項目:
my_project/
__init__.py -- empty
run.py
datacheck/
__init__.py -- empty
datacheck.py -- containing class DataCheck(object)
config.py -- containing BusinessConfig(object)
business.py -- containing class BusinessCheck(DataCheck)
我的PYTHONPATH
配置為包含/ my_project。
在run.py中,我有以下代碼:
from datacheck.business import BusinessCheck
business = BusinessCheck()
business.check_data()
在business.py中,我有以下導入失敗:
from datacheck.config import BusinessConfig
from datacheck.datacheck import DataCheck
from .config import BusinessConfig
相對導入可以正常工作 - 但是我已經在很多線程中讀到絕對導入是首選。
為了做一個簡單的測試,我還創建了以下內容:
myproject/
__init__.py -- empty
run_test.py
test/
__init__.py -- empty
test1.py -- containing class Test1(object)
test2.py -- containing class Test2(Test1)
run_test.py導入並運行Test2
類,這沒有失敗。
它讓我有點大吃一驚,我不明白為什么我在datacheck中的絕對導入不起作用 - 誰能解釋一下?
如果您的模塊可以用作__main__
,則應該更喜歡絕對導入,如文檔中所述。 如果沒有,相對進口是好的。
這些導入失敗,因為您的包datacheck
包含模塊datacheck
(同名)。 查找名稱時,Python首先隱式查看包內部。 在那里,它找到了模塊datacheck
。 但是,此模塊不包含名稱為config
任何內容,因此導入失敗。
如果要使用絕對導入,請將模塊datacheck
所有內容移動到包的__init__.py
中,或重命名它。
我知道這是多年以后,但為了其他人在這里搜索,我能夠用這段代碼解決類似的問題:
from __future__ import absolute_import
在那之后,絕對導入在Python 2.6和2.7中運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.