首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python自动摘要:导入模块失败

Python自动摘要:导入模块失败
EN

Stack Overflow用户
提问于 2020-06-06 02:08:35
回答 3查看 4.3K关注 0票数 6

我正在尝试使用sphinx-auto汇总来创建python代码的自动摘要,如下所示:

代码语言:javascript
运行
复制
main
├───modA
|   ├───__init__.py
|   ├───modA.py
├───modB
|   ├───__init__.py
|   ├───modB.py
├───docs
|   ├───build
|   └───source
|       ├───refs
|       |   |───_autosummary
|       |   |───index.rst
|       |   |───modA.rst
|       |   |───modB.rst
|       ├───index.rst
|       ├───conf.py

正如Sphinx文档中提到的,我插入了工作目录的and路径,将sphinx.ext.autodoc添加到扩展列表中,并将autosummary_generate设置为conf.py中的True。

代码语言:javascript
运行
复制
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    'sphinx.ext.autodoc',
    "sphinx.ext.autosummary", 
    'sphinx.ext.coverage', 
    'sphinx.ext.napoleon'
]

autosummary_generate = True

接下来,在docs/index.rst中,我添加了对refs/文件夹的引用。

代码语言:javascript
运行
复制
.. toctree::
   :maxdepth: 2

   refs/index

refs/index.rst引用了modA.rstmodB.rst

代码语言:javascript
运行
复制
.. toctree::
   :maxdepth: 2

   modA
   modB

modA.rstmodB.rst中,我试图创建自动摘要。

modA.rst

代码语言:javascript
运行
复制
Attributes
~~~~~~~~~~
.. autosummary::
   :toctree: _autosummary

   modA.modA.create_job

modB.rst

代码语言:javascript
运行
复制
Attributes
~~~~~~~~~~
.. autosummary::
   :toctree: _autosummary

   modB.modB.get_jobs

虽然代码适用于modA.rst,但对于modB.rst却失败了。错误上说,

代码语言:javascript
运行
复制
failed to import 'modB.modB.get_jobs': no module named modB.modB.get_jobs

我试着把.. currentmodule::modB.. currentmodule::main放在自动摘要之前,但没有成功。我甚至尝试过将.. module::modB.. module::main放在自动摘要之前,但即使这样也不起作用。我在网上搜索了很多,但不明白为什么不起作用。

编辑-1:在两个文件夹中添加了__init__.py

EN

回答 3

Stack Overflow用户

发布于 2021-04-16 13:38:56

我在使用狮身人面像上也有类似的问题。

经过一些实验,我怀疑像failed to import XXX: no module named XXX这样的错误消息并不一定意味着无法找到模块XXX。相反,在我的实验中,在进口XXX时出现了一些错误。

在我的例子中,模块XXX本身正在导入一些尚未安装的包YYY。因为Sphinx导入XXX是为了提取docstring,所以它在这个导入尝试中发现了一个错误。删除该import YYY语句后,我可以成功地构建文档。

票数 7
EN

Stack Overflow用户

发布于 2021-03-23 15:53:25

我也有过类似的问题。

导入错误失败的原因是,在.. autosummary::指令下指定的模块.. autosummary::导入了未安装的库。

代码语言:javascript
运行
复制
Attributes
~~~~~~~~~~
.. autosummary::
   :toctree: _autosummary

   modA.modA.create_job

但是通常情况下,failed to import错误的原因可能不同,因为从.. autosummary::指令导入模块的函数捕获所有错误和自动摘要打印以输出相同的错误消息。

以下是github https://github.com/sphinx-doc/sphinx/issues/7989的相关问题

我建议导入您的模块modA.modAmodB.modB,并查看导入过程中是否有任何错误。

票数 1
EN

Stack Overflow用户

发布于 2021-11-01 12:25:17

当Sphinx无法处理python导入时,它将显示通用模块导入警告(".没有名为.的模块“)就像你提到的。当所有导入的python包都正确地安装在环境中时,似乎甚至会发生此警告,这只意味着某些东西无法导入。

消除这些警告的一个解决方法是使用狮身人面像的autodoc_mock_imports文件中的conf.py来模拟外部python库。

例如:

代码语言:javascript
运行
复制
import flask
import mongoengine
...
# your python code

带有模拟烧瓶的conf.py示例:autodoc_mock_imports = ["flask", "mongoengine"]

在这种情况下,Sphinx将忽略这些导入,并且自动摘要可能能够正确构建摘要,而不会出现任何错误。

为了更具体地说明您的情况:您的python ' modB.modB‘可能包含Sphinx无法处理的导入语句,您需要正确安装python包,或者模拟modB.modB文件中导入的特定库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62226506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档