sphinx.ext.autodoc:外部包的 ModuleNotFoundError

问题描述 投票:0回答:1

我想开始使用 Sphinx 记录我的基于 Flask 的应用程序。目前,我正在尝试弄清楚如何使用 autodoc 扩展。我的本地模块都找到了,但是外部库的导入在sphinx中不起作用。

我的所有需求都在一个

requirements.txt
文件中,所以我希望 sphinx 可以从那里提取包/模块。我正在环境中的本地计算机上测试 sphinx。因此我已经添加了:

import os
import sys
sys.path.insert(0, os.path.abspath('../../'))
sys.path.insert(0, os.path.abspath('~/envs'))

myproject/docs/source/config.py
。这适用于我的项目内部模块,但不适用于进一步的工作。

因此,运行

sphinx-build -M html docs/source/ docs/build/
会导致此错误:

WARNING: Failed to import myproject.errors.
Possible hints:
* ModuleNotFoundError: No module named 'flask'
* KeyError: 'myproject'
building [mo]: targets for 0 po files that are out of date
writing output... 
building [html]: targets for 0 source files that are out of date
updating environment: 0 added, 1 changed, 0 removed
reading sources... [100%] api
WARNING: autodoc: failed to import module 'errors' from module 'myproject'; the following exception was raised:
No module named 'flask' [autodoc.import_object]

作为一名 mwe,我创建了

myproject/docs/source/api.rst
:

API
===

.. autosummary::
   :toctree: generated

.. automodule:: myproject.errors
    :members:
    :imported-members:

为了仔细检查是否安装了所有依赖项,我运行了 `

(envs) user@machine:~/git/myproject$ pip freeze | grep -F "Flask"
Flask==2.3.3

为了排除任何可能是

flask
特定的问题,我尝试通过
autodoc_mock_imports=['flask']
来模拟它,但这将问题一一转移到所有其他外部模块。

python flask python-sphinx autodoc
1个回答
0
投票

非常感谢,mzjn!你的提示是正确的。我好奇地在 venv 中运行所有 python 命令,但

sphinx-build
除外。我通过添加

来证明这个假设
sys.path.append(os.path.abspath('../../'))
print('Sphinx runs with the following prefix:'+sys.prefix)

到我的

conf.py
,这是我从 wpercy 获得的,我将把这些行留在那里,以供以后调试。知道这一点后,我尝试按照 migonzalvar 的描述进行操作:

环境激活后:

$ source /home/migonzalvar/envs/myenvironment/bin/activate
$ pip install sphinx
$ which sphinx-build
/home/migonzalvar/envs/myenvironment/bin/sphinx-build

还是没用。只有在我停用 venv 并通过

pip uninstall sphinx
全局卸载 sphinx 后,sphinx-build 才开始使用 venv(如我所愿)。

© www.soinside.com 2019 - 2024. All rights reserved.