1

背景资料

  • 服务器和本地的 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

我完全感到困惑。代码完全相同。导入链在出错之前也略有不同,这让我倍感困惑。

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

4

1 回答 1

0

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

于 2013-05-14T14:58:17.400 回答