Nic*_*eet 6 python python-sphinx
我有一个robot.py具有类似命名类的模块。我还有一个cop.py模块和一个robber.py模块,每个模块也有类似命名的类,每个子类都来自Robot. 我将它们分开以保持文件更短。
在创建Robot对象时,Robot有多个Cop和Robber属性(即,每个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
Run Code Online (Sandbox Code Playgroud)
(当然,每个Cop.py并Robber.py都具有from cops_and_robots.robo_tools.robot import Robot在他们的文件的开头)
这在实践中工作得很好。但是,当我尝试使用 Sphinx 进行自动文档处理时,出现以下问题:
/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'
Run Code Online (Sandbox Code Playgroud)
有没有什么好方法可以让我重组我的代码,或者修改 Sphinx,这样我就不会陷入这种循环依赖问题?
小智 1
如果你的Python代码中有一些奇怪的循环依赖(嘿我们都经历过),你可能需要强制Sphinx以特定的顺序导入你的依赖。我无法帮助您确定需要使用哪个顺序,但您可以将 import 语句添加到conf.py:
import os
import sys
sys.path.insert(0, os.path.abspath(YOUR_MODULE_PATH)
import YOUR_MODULE_DEPENDENCY_TO_RESOLVE_FIRST
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |