Python循环导入 - 在本地工作但不在服务器上工作

时间:2013-05-14 11:12:11

标签: python importerror

背景资料

  • 服务器上的Python 2.7.1(r271:86832)和本地
  • 使用virtualenv与所有依赖项相同
  • 本地Python是64位
  • 服务器Python是32位
  • 使用Django

实际问题

我们在服务器上遇到了一个循环导入问题,在任何测试期间都没有捕获。

执行一个简单的循环导入示例显示循环导入确实在本地发生错误。

我们在导入时在每个文件的顶部粘贴了一些打印件。

本地行为:

priority.__init__.py
sync.tasks.keywords.py
priority.reasons.py
priority.__init__.py (<- circular import but it works??)
priority.reasons.py

服务器行为:

priority.__init__.py
sync.tasks.keywords.py
priority.__init__.py (<- circular import but it works??)
Traceback (most recent call last):
    ...
    from sync.tasks.keywords import check_keywords
    ImportError: cannot import name check_keywords

我完全不知所措。代码完全一样。令我感到困惑的是,在出错之前,进口链略有不同。

那么......关于从哪里开始寻找的任何提示?

1 个答案:

答案 0 :(得分:0)

我建议通过移动类/函数中的一个导入(而不是文件的顶部)来打破循环导入。在我看来,这种方法没有任何严重的缺点,并且节省了大量时间对循环导入进行硬性和相当无用的调试。