首次加载模块时,我会执行一些初始化操作。问题是它以某种方式导入了两次,我无法弄清楚原因。我认为它可能是使用不同的路径导入的,如下例所示:
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
答案 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的非常好的讨论