pythonsphinx autodoc导入在运行时才可能。变通办法?

2024-05-15 22:47:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Sphinx来记录Odoo项目,但是在使用autodoc时遇到了一个失败,因为在运行时之前导入是不可能的。让我把它分解一下:

  1. 存储库中至少有一个模块需要从另一个模块导入常量。在
  2. 由于在项目根目录下没有init,因此要使其生效,导入不是:

    来自[模块2]。模特。随便导入任何内容

  3. 相反,它必须是:

    从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池访问。在


Tags: 模块项目infrompyodooimportinit