簡體   English   中英

模塊中的Python絕對導入失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM