【发布时间】:2011-08-31 14:05:05
【问题描述】:
我有一个奇怪的问题。我决定从
重命名我的包的整个分支foo.bar.somemodule
到
foo.django.bar.somemodule
问题是完成后,我收到以下错误:
Traceback (most recent call last):
File "/home/workspace/eclipse/foo/src/foo/manage.py", line 2, in <module>
from django.core.management import execute_manager
ImportError: No module named core.management
如果我现在,将名称恢复为
foo.djangox.bar.somemodule
它有效!请注意,我在 django 中添加了“x”。
在使用 foo.django.bar.somemodule 时似乎存在某种名称冲突,但是给出了什么?它们应该与 django 本身分开。
我的代码中的所有导入都是这种形式
from foo.django.bar.somemodule import someobject
import foo.django.bar.somemodule
编辑:澄清在倒数第二个导入中有一个“x”
【问题讨论】:
-
根据traceback,不是from foo.django.bar.somemodule import someobject,而是from django.core.management import execute_manager。所以开头的 foo 显然不在 manage.py 中。我是否错误地阅读了您的回溯?
-
我猜
foo的目录在你的python路径中。如果它首先在其他地方找不到django,它会尝试从那里导入,因为你使用了相同的名称..... -
@Jacinda S:我不确定我是否完全理解您的问题,但需要澄清的是,manage.py 是 django 的一部分并自动生成。我从未将 foo.django.bar.somemodule 放在已安装的应用程序中,因此它会自动查看整个源目录并抱怨。我打算集成代码,但试图隔离问题。
-
再看一遍,我同意 Torsten 作为最可能的解释。在 manage.py 中的第 2 行上方,将以下内容用于调试: import sys;打印系统路径
-
另一个简单的检查会告诉你同样的事情来自 django import bar
标签: python django import package name-clash