我正在尝试使用Sphinx来记录Odoo项目,并且在使用autodoc时我遇到了失败,因为直到运行时才能导入。让我分解一下:
由于项目根目录中没有 init ,为了使其正常工作,导入不是:
来自[module_2] .models.whatever import what
相反,它必须是:
来自openerp.addons的。[module_2] .models.whatever import whatever
这是因为odoo在运行时将来自不同插件路径的所有模块收集到一个池中,并且任何模块都可以从先前加载的模块导入(顺序取决于依赖性)。
因为上面提到的导入是Sphinx无法解决的,所以我得到一个"无法导入名称..."我尝试构建时出错。我可以删除那个导入,从另一个模块复制粘贴常量,那就是这样,但是为了autodoc而破坏代码和实现一个糟糕的做法似乎是不确定的,我只是开始记录这个庞大的项目,所以我不知道会有多少这些会出现(我记得至少还有一个模块会这样做)。什么是最好的方法呢?
顺便说一下,追溯是:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/sphinx/ext/autodoc.py", line 657, in import_object
__import__(self.modname)
File "account_analytic_default_segment/__init__.py", line 1, in <module>
from . import models
File "account_analytic_default_segment/models/__init__.py", line 3, in <module>
from . import account_analytic
File "account_analytic_default_segment/models/account_analytic.py", line 7, in <module>
from openerp.addons.account_analytic_policy.models.analytic import USAGE
在结构上多了一点,项目位于Odoo配置的addons_path中包含的目录中,该目录与Odoo目录完全分开。在运行时,包含所有插件路径(将其视为一种符号链接)。但在运行之前,它们是无关的。我已经解决了其他&#34;来自openerp ...&#34;通过在PYTHONPATH中包含Odoo进行导入,但是这不能解决从项目中的另一个模块导入时的问题,因为它们在运行时之前并没有看到对方,在运行时它们只能从Odoo插件池访问。