模块被多次导入
我在一个模块第一次加载的时候会做一些初始化的工作。问题是,这个模块居然被导入了两次,我搞不清楚为什么。我想可能是因为用不同的路径导入了,就像这个例子:
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 个回答
2
这里有一篇关于Django中settings.py多次导入的很不错的讨论,链接是http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html
10
通常情况下,Python 不应该重复导入一个模块,无论是用绝对路径还是相对路径。出现这种情况的可能原因是,Python 可能把源文件当成了两个不同的文件,因此分别导入了它们。这种情况可能是因为有符号链接的文件或目录,或者是有不同版本的文件并排存在,或者是 PYTHONPATH 中有重叠的目录,具体原因很难说。
要找出问题所在,可以使用交互式调试器。你可以在文件的最上面加一行代码 import pdb; pdb.set_trace()
,然后在交互式命令行中输入 bt
,这样可以查看导入的调用链。接着输入 c
继续执行。当文件第二次被导入并且调试器被激活时,再次尝试输入 bt
,对比两次的输出,这可能会帮助你找到问题所在。