我有一个这样的项目结构:
package/
__init__.py
module.py
Run Code Online (Sandbox Code Playgroud)
__init__.py 包含:
from .module import Class
Run Code Online (Sandbox Code Playgroud)
module.py 包含:
class Class:
pass
Run Code Online (Sandbox Code Playgroud)
使用sphinx-apidoc -o package/docs/ package/和sphinx-build package/docs/ package/docs/_build的文档Class如下所示:
类 package.module。类
基础:对象
我想改成以下输出:
类包。类
基础:对象
或者,甚至更好,没有包名称:
类 级
基础:对象
用户不必知道在哪个文件中定义了类。如果不混淆,这些信息是完全不相关的。由于__init__.py是Class直接导入到包的名称空间中,因此用户会将此类导入为from package import Class,而不是from package.module import Class,我希望文档能够反映出来。
有没有一种方法可以让狮身人面像输出相对于包名称空间的路径?
问题
\n我正在尝试为包含许多子目录的 Python 项目构建文档。我正在尝试使用sphinx-apidoc以使该过程变得无缝。但是,尽管我尽了最大努力,但我无法处理子目录中的代码。我在这里遵循了 YouTube 上的一个很棒的简短教程,效果很好。为了模拟我遇到的问题,我将其中一个文件放入can_it_handle_folders目录中,如下所示。
spamfilter-py\n\xe2\x94\x82 __init__.py (**)\n\xe2\x94\x82 readme.md\n\xe2\x94\x82 sample.py\n\xe2\x94\x82 spamfilter.py\n\xe2\x94\x82 token.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80can_it_handle_folders\n\xe2\x94\x82 __init__.py\n\xe2\x94\x82 test_spamfilter.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80docs\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80build\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80html\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80source\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80conf.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80index.rst\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80modules.rst\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80sample.rst\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80spamfilter.rst\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80token.rst\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80spamfilter-py.test_spamfilter.rst\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80html\n...\nRun Code Online (Sandbox Code Playgroud)\n我进入该docs目录并运行sphinx-apidoc -o . ..以根据根spamfilter目录生成 .rst 文件。我已将以下行添加到conf.py:
sys.path.insert(0, os.path.abspath(\'..\'))\nRun Code Online (Sandbox Code Playgroud)\n和我生成的modules.rst看起来像:
spamfilter-py\n=============\n\n.. toctree::\n :maxdepth: 4\n\n sample\n spamfilter\n token\nRun Code Online (Sandbox Code Playgroud)\n目录中任何内容的 html 都can_it_handle_folders不会生成。如果我尝试添加can_it_handle_folders/test_spamfilter到目录树,我会得到一个toctree contains reference to nonexisting document \'can_it_handle_folders/test_spamfilter\' …
我正在使用 PyCharm 处理 Python 项目,现在我需要生成相应的 API 文档。我正在使用docstrings. 我读过关于 Sphinx 和 Doxygen 的文章,Sphinx 是目前最受推荐的。我试图配置 Sphinx whitin PyCharm,但我没有让它工作。
这是项目结构:
这是与命令Sphinx Quickstart的 I/O 交互
C:\Python\Python36\Scripts\sphinx-quickstart.exe
Welcome to the Sphinx 1.6.3 quickstart utility.
Please enter values for the following settings (just press Enter to
accept a default value, if one is given in brackets).
Enter the root path for documentation.
> Root path for the documentation [.]:
You have two options for placing the build directory for Sphinx …Run Code Online (Sandbox Code Playgroud) 我正在开发一个只有一个 .py 模块的 Python 库,我正在尝试从文档字符串中为它生成文档。我已经设置了 Sphinx 并运行了 spinx-quickstart 脚本,但是当我尝试运行时(在 docs 目录中)
sphinx-apidoc ../cffiwrap.py -o .
Run Code Online (Sandbox Code Playgroud)
但它只是说:
../cffiwrap.py is not a directory.
Run Code Online (Sandbox Code Playgroud)
是否有其他一些 Sphinx 脚本可以自动记录单个文件?我想只针对它运行它,..但后来我认为它会运行到我的测试目录中并尝试从我的单元测试中生成文档......
我目前正在尝试使用Sphinx实现自动文档创建(使用扩展名sphinx-apidoc和napoleon)。这很好用,但是如果将typehints(PEP484约定)自动添加到params列表中会更好。
我想知道这是否可能。
更具体地说:(从拿破仑的例子)
def function_with_pep484_type_annotations(param1: int, param2: str) -> bool:
"""Example function with PEP 484 type annotations.
Args:
param1: The first parameter.
param2: The second parameter.
Returns:
The return value. True for success, False otherwise.
"""
Run Code Online (Sandbox Code Playgroud)
如下所示:
参数列表包含所有参数,但不附加类型。可以手动添加它们,但是当决定更改签名时,这可能会带来将来的问题。
手动添加类型的示例:
def function_with_pep484_type_annotations(param1: int, param2: str) -> bool:
"""Example function with PEP 484 type annotations.
Args:
param1 (int): The first parameter.
param2 (str): The second parameter.
Returns:
The return value. True for success, False otherwise.
"""
Run Code Online (Sandbox Code Playgroud)
呈现为:
python type-hinting python-sphinx sphinx-napoleon sphinx-apidoc
我正在使用带有扩展名的 Sphinx 自动生成 Python 包的文档autodoc。我面临的问题是跳过autodoc任何带有下划线的模块。
有些模块被强调,以阻止用户导入它们。但是,这些带下划线的文件中的类没有下划线。
当我手动将带下划线的模块添加到package_name.rst并运行时make html,它会显示。所以我的问题是如何从autodoc.
我试图避免package_name.rst通过脚本解析来添加它们。我希望有一个 autodoc 标志或 hack!
我在rst包含automodule但似乎没有任何效果的文件上运行 Sphinx 。
以下是详细信息:我有一个 Python 项目,其中agent.py包含一个包含类的文件Agent。我还有一个子目录,里面apidoc有一个文件agent.rst(由 生成sphinx-apidoc):
agent module
============
.. automodule:: agent
:members:
:undoc-members:
:show-inheritance:
Run Code Online (Sandbox Code Playgroud)
我sphinx-build -b html apidoc apidoc/_build使用项目目录作为当前工作目录运行 sphinx 。
为了确保找到 Python 文件,我在 中包含了以下内容apidoc/conf.py:
agent module
============
.. automodule:: agent
:members:
:undoc-members:
:show-inheritance:
Run Code Online (Sandbox Code Playgroud)
它运行时没有错误,但是当我打开生成的 HTML 文件时,它只显示“代理模块”并且一切都是空白的。为什么不显示类Agent及其成员?
更新:最初的问题很可能是由于我没有包含sphinx.ext.autodoc在conf.py. 但是,现在我这样做了,我收到了如下警告:
Run Code Online (Sandbox Code Playgroud)import os import sys sys.path.insert(0, os.path.abspath('.'))
假设我们有一个如下所示的文档结构
.
|____src
| |____abc.py
|____docs
Run Code Online (Sandbox Code Playgroud)
现在我们使用以下命令生成文档:
sphinx-apidoc -F -o docs src
Run Code Online (Sandbox Code Playgroud)
这会在./docs/文件夹中生成多个文件,其中包括./docs/abc.rst,我现在可以使用文件夹make html中的来构建它./docs/。
现在,在添加一些附加功能后,./src/abc.py我想重建文档。我尝试了同样的操作,Sphinx 说其余文件已经存在,因此它没有得到更新。我必须手动删除相关文件才能更新文档。
现在的问题是,如何在不删除.rst文件的情况下完成整个过程。