Python/Django导入了错误的模块(应该是绝对的相对模块)
我使用的是Django 1.2 pre alpha和Python 2.4。是的,我知道,但我一直坚持着。我们目前无法升级,我怀疑这是否是答案 我有两个模板标记库,Python/Django导入了错误的模块(应该是绝对的相对模块),python,django,django-templates,python-import,Python,Django,Django Templates,Python Import,我使用的是Django 1.2 pre alpha和Python 2.4。是的,我知道,但我一直坚持着。我们目前无法升级,我怀疑这是否是答案 我有两个模板标记库,foo和bar。但是,foo也是顶级包的名称,它恰好是bar的包: foo-1.2.3/ foo/ conf/ settings.py templatetags/ bar.py bar-4.5/ somepackage/ templatetags/ foo.py 标
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”不是有效的标记库:无法从django.templatetags.bar加载模板库,没有名为conf的模块
不幸的是,Django执行所有模板标记库并将其绑定到Django.templatetags.*
。因此,bar
被导入为django.templatetags.bar
,当它从foo.conf导入设置调用时,它最终导入bar-4.5/somepackage/templatetags/foo.py
。啊
你有什么办法解决这个问题吗?
我在导入之前设置了一个断点,并确认foo-1.2.3
位于sys.path
的开头,但是import
关键字仍然发现错误的foo
如果有用的话,请注意我可以修改foo-1.2.3
包(因为它已经在本地签入并且正在逐步淘汰),但我拒绝修改bar-4.5
包(因为它是一个开源包,已经在系统范围内安装)。经过几个小时的黑客攻击,这就成功了
原始代码:
from foo.conf import settings
新代码:
foo = __import__('foo')
conf = __import__('foo.conf').conf
settings = __import__('foo.conf.settings').conf.settings
(我可能不需要第二行。)
EWW.重命名foo/
?顺便说一句,在Python>=2.5上,您可以使用from\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuimport
☃