模块导入多次

时间:2011-02-04 10:59:44

标签: python django

首次加载模块时,我会执行一些初始化操作。问题是它以某种方式导入了两次,我无法弄清楚原因。我认为它可能是使用不同的路径导入的,如下例所示:

a.py:

from apps.blog import models
...

b.py:

from blog import models
...

我在我的模块中插入了print __name__,并打印了blog.models两次,因此问题不在导入路径中。
那么,有多少其他原因可以多次导入模块吗?

更新: 我没有提到我正在使用django。我认为这个问题与django的manage.py脚本有关: https://docs.djangoproject.com/en/dev/releases/1.4/#updated-default-project-layout-and-manage-py

2 个答案:

答案 0 :(得分:8)

正常情况下,无论绝对/相对引用如何,Python都不应导入模块两次。 Python可能会将源文件视为两个不同的文件,从而单独导入它们。这可能是因为符号链接的文件/目录,或并排的不同版本,或PYTHONPATH中的重叠目录,很难说。

跟踪此问题的一种方法是使用交互式调试器。在文件的顶层添加一行import pdb; pdb.set_trace(),然后在交互式shell中输入bt以获取应显示导入链的回溯。继续c。第二次导入文件并激活调试器时,再次尝试bt并比较两个输出,这可能会显示问题。

答案 1 :(得分:1)

以下是关于Django http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

中多次导入settings.py的非常好的讨论