Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/Django导入了错误的模块(应该是绝对的相对模块)_Python_Django_Django Templates_Python Import - Fatal编程技术网

Python/Django导入了错误的模块(应该是绝对的相对模块)

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 标

我使用的是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
标记库
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