Sphinx 找不到我的 Python 文件。提示“没有名为...的模块”

2025-03-26 09:08:00
admin
原创
18
摘要:问题描述:我对 Sphinx 自动文档生成有疑问。我觉得我尝试做的事情应该非常简单,但不知为何,它不起作用。我有一个名为的 Python 项目slotting_tool。此目录位于C:UsersSamDesktoppicnic-data-shared-toolsstandaloneslotting_tool我...

问题描述:

我对 Sphinx 自动文档生成有疑问。我觉得我尝试做的事情应该非常简单,但不知为何,它不起作用。

我有一个名为的 Python 项目slotting_tool。此目录位于C:UsersSamDesktoppicnic-data-shared-toolsstandaloneslotting_tool

我使用 设置了 Sphinx sphinx-quickstart。我的目录结构(简化)如下:

slotting_tool/
|_ build/
|_ source/
|___ conf.py
|___ index.rst
|_ main/
|___ run_me.py

slotting_tool现在,我通过在文件中添加以下内容来设置项目的根目录conf.py

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

接下来,我将更新我的index.rst文件,使其如下所示:

.. toctree::
   :maxdepth: 2
   :caption: Contents:

.. automodule:: main.run_me
   :members:

当尝试使用命令构建我的 html 时sphinx-build -b html source .uild,我收到以下输出,并出现no module named错误:

(base) C:UsersSamDesktoppicnic-data-shared-toolsstandaloneslotting_tool>sphinx-build -b html source .uild
Running Sphinx v1.8.1
loading pickled environment... done
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 1 source files that are out of date
updating environment: [] 0 added, 1 changed, 0 removed
reading sources... [100%] index
WARNING: autodoc: failed to import module 'run_me' from module 'main'; the following exception was raised:
No module named 'standalone'
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] index
generating indices... genindex
writing additional pages... search
copying static files... done
copying extra files... done
dumping search index in English (code: en) ... done
dumping object inventory... done
build succeeded, 1 warning.

The HTML pages are in build.

没有引用run_me.py构建中的 HTML 页面。我尝试将根目录设置为各种目录,并尝试将所有点替换.为反斜杠``等,但似乎找不到我做错的地方。

顺便说一句,不是模块的说法standalone实际上是正确的,它只是一个没有的目录__init__.py。不知道这是否会造成麻烦?

有人有想法吗?


解决方案 1:

这是“入门”的通常“规范方法”,适用于源代码驻留在目录中而不是简单地位于基目录中的情况。src`Project/src`Project

请遵循以下步骤:

  1. 在您的目录中创建一个docs目录(以下步骤中的命令Project都是从这个目录执行的)。docs

  2. sphinx-quickstart(选择source与不同文件夹中的build位置.html和文件分开)。.rst

  3. sphinx-apidoc -o ./source ../src

  4. make html

这将产生以下结构(假设您的.py源文件位于Project/src):

Project
|
├───docs
│   │   make.bat
│   │   Makefile
│   │
│   ├───build
│   └───source
│       │   conf.py
│       │   index.rst
│       │   modules.rst
│       │   stack.rst
│       │
│       ├───_static
│       └───_templates
└───src
        stack.py

conf.py需要添加(第 2 步之后):

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join('..', '..', 'src')))

还包括conf.py

extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon']

并且index.rst您将链接modules.rst

Welcome to Project's documentation!
================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

   modules
      
   
Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

您的stack.rstmodules.rst是由 自动生成的sphinx-apidoc,无需更改它们(此时)。但您要知道它们的样子是这样的:

stack.rst

stack module
============

.. automodule:: stack
   :members:
   :undoc-members:
   :show-inheritance:

modules.rst

src
===

.. toctree::
   :maxdepth: 4

   stack


make html之后在浏览器中打开Project/docs/build/index.html,结果:
在此处输入图片描述

和:

在此处输入图片描述

解决方案 2:

让我们以一个项目为例:dl4sci-school-2020在 master 分支上,提交:6cbcc2c72d5dc74d2defa56bf63706fd628d9892

├── dl4sci-school-2020
│   ├── LICENSE
│   ├── README.md
│   ├── src
│   │   └── __init__.py
│   └── utility
│       ├── __init__.py
│       └── utils.py

实用程序包有一个 utils.py 模块:

遵循这个过程(仅供参考,我正在使用sphinx-build 3.1.2):

  1. 在你的项目下创建一个docs/目录:

mkdir docs
cd docs
  1. 在内启动sphinx docs/,只需传递你的project_name、你所选择的your_name& version,其余保留默认设置。

sphinx-quickstart

docs/您将在文件夹中自动获得以下内容

├── docs
│   ├── Makefile
│   ├── build
│   ├── make.bat
│   └── source
│       ├── _static
│       ├── _templates
│       ├── conf.py
│       └── index.rst

由于我们创建了一个单独的docs目录,因此我们需要 sphinx find 在哪里找到构建文件和 python src 模块。因此,编辑 conf.py 文件,您也可以使用我的 conf.py 文件

import os
import sys
basedir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(0, basedir)

现在,为了能够访问嵌套的多个包和模块(如果有),您需要编辑index.rst文件。

.. toctree::
   :maxdepth: 2
   :caption: Description of my CodeBase:

   modules

modules从我们将在下面创建的文件中获取内容:modules.rst确保您仍在doc/运行以下命令

sphinx-apidoc -o ./source ..

得到的输出:

├── docs
│   ├── Makefile
│   ├── build
│   ├── make.bat
│   └── source
│       ├── _static
│       ├── _templates
│       ├── conf.py
│       ├── index.rst
│       ├── modules.rst
│       ├── src.rst
│       └── utility.rst

现在运行:

make html

现在,去你选择的浏览器中打开,

file:///<absolute_path_to_your_project>/dl4sci-school-2020/docs/build/html/index.html

你准备好漂亮的文档了吗
自动生成的 python 文档。

https://i.sstatic.net/5pvLu.jpg

仅供参考,您可以切换您选择的任何主题,我发现sphinx_rtd_theme一个扩展sphinxcontrib.napoleon非常棒!感谢它们的创造者,所以我使用了它。

下面做工作!

pip install sphinxcontrib-napoleon
pip install sphinx-rtd-theme

您可以在readthedocs上托管您的文档,
享受记录您的代码的乐趣!

解决方案 3:

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

这不对。Steve Piercy 的评论并不完全正确(您不需要添加,__init__.py因为您使用的是简单模块),但他们说得对,autodoc 将尝试导入模块,然后检查内容。

但是假设你的树是

doc/conf.py
src/stack.py

那么你只是将包含你的存储库的文件夹添加到了,这sys.path是完全没用的。你需要做的是将src文件夹添加到sys.path,这样当 sphinx 尝试导入时,stack它会找到你的模块。所以你的行应该是:

sys.path.insert(0, os.path.abspath('../src')

(路径应该是相对于conf.py)。

值得注意的是:由于您拥有的东西是完全合成的并且不应包含任何秘密,因此可访问的存储库或整个内容的 zip 文件可以更轻松地诊断问题并提供相关帮助:推断的越少,答案的错误就越少。

解决方案 4:

pip install --no-deps -e .我认为,在顶级项目文件夹(或任何地方)运行setup.py以获取“可编辑”安装是获取包模块的更好选择,而不是在使用PYTHONPATH中对其进行更改。docs/conf.py`sys.path`

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2079  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1459  
  建筑行业正处于数字化转型的关键时期,建筑产品生命周期管理(PLM)系统的实施对于提升项目效率、质量和协同性至关重要。特别是在 2025 年,基于建筑信息模型(BIM)的项目进度优化工具成为众多建筑企业关注的焦点。这些工具不仅能够整合项目全生命周期的数据,还能通过精准的分析和模拟,为项目进度管理提供强大支持。BIM 与建...
plm是什么软件   0  
  PLM系统开发的重要性与现状PLM(产品生命周期管理)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它贯穿产品从概念设计到退役的整个生命周期,整合了产品数据、流程以及人员等多方面的资源,极大地提高了企业的协同效率和创新能力。通过PLM系统,企业能够实现产品信息的集中管理与共享,不同部门之间可以实时获取...
国产plm软件   0  
  PLM(产品生命周期管理)系统在企业产品研发与管理过程中扮演着至关重要的角色。随着市场竞争的加剧和技术的飞速发展,企业对PLM系统的迭代周期优化需求日益迫切。2025年敏捷认证对项目管理提出了新的要求,其中燃尽图作为一种强大的可视化工具,在PLM系统迭代周期优化中有着广泛且重要的应用。深入探讨这些应用,对于提升企业的项...
plm系统主要干什么的   0  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用