最终用户将如何访问 Sphinx 为 Python 包生成的文档?

Posted

技术标签:

【中文标题】最终用户将如何访问 Sphinx 为 Python 包生成的文档?【英文标题】:How would the end-user access the Sphinx generated documentation for a Python package? 【发布时间】:2017-08-25 11:36:42 【问题描述】:

我在 python 中开发了一个包,并使用 Sphinx 为它创建了文档。

文件夹结构的相关部分如下所示:

my_package
  setup.py
  my_package
    my_module.py
  docs
    index.rst
    _build
      html
        index.html

该软件包将托管在 LAN 中由 PYTHONPATH 引用的某个位置。我的最终用户将使用import my_package 访问我的包。他们不知道文档(或与此相关的包)的位置。使用help(my_package) 只会向用户显示模块内的文档。

那么,我想知道如何让我的最终用户访问 index.html 文件?我想过用一种从指定位置打开 html 文件的方法进行编码,但我不喜欢在路径中硬编码的想法。有这样做的标准方法吗?

【问题讨论】:

为什么不将 Sphinx-Documentation 的路径添加到模块的文档字符串中? @ChristianSauer 我想到了这一点,但由于文档是包的一部分,我希望有某种方式允许用户从包的任何位置调用index.html已安装。 老实说,是什么阻止您使用您的包部署文档?我已经为我们的一个内部包做到了这一点 - 确保它不会为公共包这样做,但对于我们的内部包,这是部署文档的最简单选择 @ChristianSauer,我将使用我的包部署文档,但我只是想避免告诉用户:转到安装包的任何位置,然后查看 docs > _build > html 并打开index.html 文件以访问文档。这似乎不太整洁...... 你使用什么样的编辑器?如果是 pycharm,您可以为包添加额外的文档源。如果没有,最简单的方法是在包、方法和类的文档字符串中添加一个 url。这并不少见,numpy 正是这样做的。 【参考方案1】:

扩展@pkqxdd-s 建议:

您可以轻松获取my_package模块内的文档路径

# my_module.py

def get_docs_index_path():
    import os
    my_package_root = os.path.dirname(os.path.dirname(__file__))
    docs_index = os.path.join(my_package_root, 'docs', '_build', 'html', 'index.html')
    return docs_index

现在您可以将路径添加到my_modulemy_package docstring,这样调用help(my_module) 的用户就会得到类似的东西

... 
# original my_module docstring
...

See sphinx docs at <path to your index>

查看this question 了解如何将get_docs_index_path() 的路径添加到文档字符串中。

【讨论】:

【参考方案2】:

因此,如果您唯一担心的是您不知道您的模块将安装在哪里,您可以通过调用your_module.__file__(请参阅this post)来解决这个问题。此外,您还可以使用os.path 模块。例如,调用os.path.dirname(your_module.__file__) 可能会返回您的docs 文件夹所在文件夹的路径。然后,您可以相应地修改路径以访问 .html 文件。

【讨论】:

【参考方案3】:

通常,文档单独部署到包中。例如,pandas 存储库(包括 .rst 文件中文档的源代码)保存在 Github,但构建的文档可在 its own url 获得。

【讨论】:

以上是关于最终用户将如何访问 Sphinx 为 Python 包生成的文档?的主要内容,如果未能解决你的问题,请参考以下文章

python 仅为管理员用户使用Django提供Sphinx文档

如何使用 Sphinx 为 Python 属性设置器生成文档?

在 Sphinx 文档中保留包装/装饰 Python 函数的默认参数

sphinx - 如何更改文档样式表

python文档生成工具:pydocsphinx;django如何使用sphinx?

用 Sphinx 搭建博客时,如何自定义插件?