使用Sphinx时解决循环导入错误

时间:2015-02-19 02:20:43

标签: python documentation python-sphinx

我有一个模块robot.py,它有一个类似命名的类。我还有一个cop.py模块和一个robber.py模块,每个模块都有类似命名的类,每个模块都来自Robot。我把它们分开以保持文件更短。

在创建Robot对象时,Robot有多个CopRobber属性(即每个Robot都有一些其他警察和劫匪跟踪)。

我已经解决了Robot.py中以下(简化)代码结构的循环导入问题,其中我将模块导入语句置于最底层:

class Robot(object):
    def __init__(self):
        self.other_cop = cop_module.Cop()
        self.other_robber = robber_module.Robber()

import cops_and_robots.robo_tools.cop as cop_module
import cops_and_robots.robo_tools.robber as robber_module

(当然,每个Cop.pyRobber.py的文件开头都有from cops_and_robots.robo_tools.robot import Robot

这在实践中很好用。但是,当我尝试使用Sphinx进行autodoc时,我遇到了以下问题:

/Users/nick/Dropbox/Syncs/Code/Github/cops_and_robots/src/cops_and_robots/docs/cops_and_robots.robo_tools.rst:41: WARNING: autodoc: failed to import module u'cops_and_robots.robo_tools.robber'; the following exception was raised:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object
__import__(self.modname)
File "/Users/nick/Dropbox/Syncs/Code/Github/cops_and_robots/src/cops_and_robots/robo_tools/robber.py", line 22, in <module>
from cops_and_robots.robo_tools.robot import Robot
File "/Users/nick/Dropbox/Syncs/Code/Github/cops_and_robots/src/cops_and_robots/robo_tools/robot.py", line 520, in <module>
import cops_and_robots.robo_tools.robber as robber_module
AttributeError: 'module' object has no attribute 'robber'

我是否有一个很好的方法来重构我的代码或修改Sphinx,这样我就不会陷入这种循环依赖问题了?

0 个答案:

没有答案