2011-06-06 10 views
2

我試圖重構一些python代碼,我卡住導入錯誤,我不明白。我懷疑某處可能存在循環依賴,但我沒有看到它,並且我沒有從錯誤消息中得到很多提示。該代碼庫很大,但也有興趣在這裏兩個模塊:Bizarre不一致python ImportError - 可能的循環依賴?

radian/models.py定義了一個名爲類ACount

datalayer/radian.py中有如下一行:

from radian.models import ACount 

當我運行的代碼(或交互地或從主程序)進口失敗的方式對我來說沒有意義。

>>> from radian.models import ACount 
>>> import datalayer.radian 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Users/leopd/dev/dbproj/datalayer/radian.py", line 10, in <module> 
    from radian.models import ACount 
ImportError: No module named models 

我最好的猜測是,有一個循環依賴的地方 - 這是radian進口的東西,進口datalayer。但我沒看到它。錯誤信息對我沒有任何意義。任何想法發生了什麼?

- 更新 -

我在Mac上使用python 2.6.1。 __init__.py文件中有一些代碼,但它們只從標準Python包導入。

+1

您使用的是什麼Python版本?如果可用,我建議啓用絕對導入。 – 2011-06-06 20:06:03

+1

'radian'是否有'__init __。py'文件? – 2011-06-06 20:06:30

+1

'radian.py'文件是否可以從本身導入'models'? – JAB 2011-06-06 20:07:28

回答

1

datalayer文件夾中的任何模塊(包括radian.py),當它看到from radian時,將假定datalayer/radian.py是相關模塊。你可能需要做

from __future__ import absolute_import 

datalayer/radian.py和其他受到類似影響的模塊,然後檢查所有的進口,以確保它們是絕對的。您可能會忽略重命名datalayer/radian.py以及引用它的導入,具體取決於該模塊的引用來源。