2011-02-04 103 views
5

我做一些初始化东西在第一次加载的模块时。问题是,它不知何故被导入两次,我不明白为什么。我想这可能使用不同的路径进口的,因为在这个例子中:模块进口多次

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

对于其他人谁可能有此错误的多个进口的一个很好的讨论,我发现我的被试图从父文件夹导入,不使用`造成..`但是通过使用`sys.path.append(os.path.abspath则(os.path.join(os.path.dirname(__ FILE__),os.path.pardir)))` – Aesthete 2012-08-07 01:16:29

回答

8

通常,Python不应该导入模块两次,而不管绝对/相对引用。很可能Python会将源文件看作两个不同的文件,然后分别导入它们。这可能是因为符号链接的文件/目录,或并行的不同版本,或在PYTHONPATH中重叠的目录,这很难说。跟踪下来

的一种方法是使用交互式调试器。添加一行import pdb; pdb.set_trace()在文件的顶层,并在交互shell进入bt得到回溯应显示进口环链。继续c。当文件再次导入并且调试器被激活时,再次尝试bt并比较两个输出,这可能会显示问题。

+4

一种更容易的过程是只模拟导入失败(语法错误或导入时的任何异常),这将使Python打印回溯。 – 2011-02-04 11:28:42