【问题标题】:Nameclash when importing packages that has the word 'django' in the name?导入名称中包含“django”一词的包时出现名称冲突?
【发布时间】: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


【解决方案1】:

您遇到了想要执行absolute import 的情况,但您的 Python 版本默认不执行这些操作。在受影响的文件顶部添加from __future__ import absolute_import,告诉Python VM激活它。

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 2013-07-27
    • 1970-01-01
    • 2021-06-06
    • 2017-05-21
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多