我使用Django 1.2 pre-alpha和Python 2.4。是的,我知道,但我堅持下去。目前我們無法升級,無論如何我懷疑這是答案。Python/Django導入錯誤的模塊(相對應該是絕對的)
我有兩個模板標籤庫foo
和bar
。然而,foo
也是頂級包的名稱,它恰好是bar
包:
foo-1.2.3/
foo/
conf/
settings.py
templatetags/
bar.py
bar-4.5/
somepackage/
templatetags/
foo.py
標籤庫bar.py
包含這樣一行:
from foo.conf import settings
.. 。你會期望它加載foo-1.2.3/foo/conf/settings.py
。
但是,沒有:
TemplateSyntaxError: 'bar' is not a valid tag library: Could not load template library from django.templatetags.bar, No module named conf
不幸的是,Django的執行a little magic並結合所有的模板標籤庫django.templatetags.*
。因此,bar
正在導入爲django.templatetags.bar
,並且它在調用from foo.conf import settings
時最終導入了bar-4.5/somepackage/templatetags/foo.py
。啊!
你有什麼想法如何解決這個問題?
我設置導入之前斷點正確的,我已經證實,foo-1.2.3
是在sys.path
開始,但import
關鍵字還發現錯誤foo
。
如果有幫助,請注意,我可以修改foo-1.2.3
包(因爲它在本地被檢查,被淘汰),但我拒絕修改bar-4.5
包(因爲它是一個開放源碼包,並已安裝全系統)。
重命名`foo /`?順便說一句,在Python> = 2.5,你可以使用從`__future__ import absolute_import` http://docs.python.org/release/2.5/whatsnew/pep-328.html☃ – jfs 2010-12-23 20:36:16