我正在尝试重构一些python代码,但遇到了我不理解的导入错误。我怀疑某个地方可能存在循环依赖关系,但我看不到它,而且从错误消息中获得的提示也没有太多。代码库很大,但是这里有两个有趣的模块:

radian/models.py定义了一个名为ACount的类

datalayer/radian.py包含以下行:

from radian.models import ACount


当我运行代码(以交互方式或从主程序运行)时,导入失败的方式对我来说没有意义。

>>> from radian.models import ACount
>>> import datalayer.radian
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/leopd/dev/dbproj/datalayer/radian.py", line 10, in <module>
    from radian.models import ACount
ImportError: No module named models


我最好的猜测是某处存在循环依赖关系-radian导入的内容会导入datalayer。但是我看不到。错误消息对我来说没有任何意义。有什么想法吗?

-更新-

我在Mac上使用python 2.6.1。 __init__.py文件中包含一些代码,但是它们仅从标准python包中导入。

最佳答案

datalayer文件夹中的任何模块(包括radian.py)在看到from radian时都将假定datalayer/radian.py是相关模块。您可能需要做

from __future__ import absolute_import


datalayer/radian.py和其他类似受影响的模块中,然后检查所有导入以确保它们是绝对导入。您可能可以重命名datalayer/radian.py和引用它的导入,具体取决于引用该模块的位置。

10-05 22:27