我试图使用Sphinx来记录Odoo项目,但是在使用autodoc时遇到了一个失败,因为在运行时之前导入是不可能的。让我把它分解一下:
由于在项目根目录下没有init,因此要使其生效,导入不是:
来自[模块2]。模特。随便导入任何内容
相反,它必须是:
从openerp.addons[模块2]。模特。随便导入任何内容
这是因为odoo在运行时将来自不同addons路径的所有模块收集到一个池中,并且任何模块都可以从先前加载的模块导入(顺序取决于依赖关系)。在
因为上面提到的导入对于Sphinx来说是不可能解决的,所以当我试图构建时,我得到了一个“cannotimportname…”错误。我可以删除导入,复制粘贴另一个模块中的常量,就这样,但是为了autodoc而破坏代码和实现一个糟糕的实践似乎是不太可能的,我才开始记录这个巨大的项目,所以我不知道还会有多少这样的模块出现(我记得至少还有1个模块会这样做)。最好的办法是什么?在
顺便说一下,回溯是:
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_路径中包含的目录中,该目录与Odoo目录完全分离。在运行时,所有的插件路径都被包括在内(可以把它看作是一种符号链接)。但在运行之前,它们是不相关的。我已经通过在PYTHONPATH中包含Odoo修复了其他“from opener…”导入的问题,但这并不能解决从项目中的另一个模块导入时的问题,因为它们在运行时之前看不到对方,而且在运行时它们只能从Odoo addons池访问。在
目前没有回答
相关问题 更多 >
编程相关推荐