Python sphinx:一个子类的文档;“不显示时间”;autodoc“模拟导入”;已启用 问题:

Python sphinx:一个子类的文档;“不显示时间”;autodoc“模拟导入”;已启用 问题:,python,gitlab-ci,python-sphinx,autodoc,Python,Gitlab Ci,Python Sphinx,Autodoc,有没有一种方法可以生成子类的sphinx文档而不需要 在GitLab CI上安装包含其父类的库 (或任何类似的CI工具) 编辑:我有7个这样的类,平均每个类大约有10个成员函数需要记录。因此,强烈建议采用自动化解决方案,因为将docstring硬编码到.rst文件中会花费太多时间 如果仅通过更改Sphinx设置无法解决问题,那么我只接受一个答案,该答案提供了生成和发布所需文档的明确说明 上下文 具体来说,我创建了一个子类tensorflow.keras.callbacks.Callback 并希

有没有一种方法可以生成子类的sphinx文档而不需要 在GitLab CI上安装包含其父类的库 (或任何类似的CI工具)

编辑:我有7个这样的类,平均每个类大约有10个成员函数需要记录。因此,强烈建议采用自动化解决方案,因为将docstring硬编码到
.rst
文件中会花费太多时间

如果仅通过更改Sphinx设置无法解决问题,那么我只接受一个答案,该答案提供了生成和发布所需文档的明确说明

上下文 具体来说,我创建了一个子类
tensorflow.keras.callbacks.Callback
并希望在文档页面上显示其docstring。 默认情况下,Sphinx必须导入所有生成文档的内容。但是 安装
tensorflow
(以及数十个其他库)似乎是不对的 仅就这一点而言,CI映像上的总容量为几GB。我只想要我的文件串 我不关心他们的父类。这就是原因 为什么我在
conf.py
中打开了
autodoc\u mock\u imports
(斯芬克斯 配置文件)。文档的构建没有错误,但是文档 那个儿童班的学生失踪了

在下面的MWE中,定制类是
keras\u callback.py
。斯芬克斯指令包含在
keras_callback.rst
中,如下所示

.. automodule:: keras_callback

    :members:
    :inherited-members:
最低工作示例 有一个 在我的GitLab回购协议上重现了这个问题

所需的子类文档如下所示

至少应该显示自定义函数的文档。父类中的成员函数可以关闭。

除了从Python代码中提取文档的(如
automodule
autoclass
)之外,Sphinx还提供(
module
class
等),所有文档都进入.rst文件

我的建议是替换
。。automodule::keras_回调
,具有以下功能:

.. class:: keras_callback.MyKerasCallback
 
   An inherited Keras ``Callback`` class.
 
   .. method:: __init__(dic=None)
 
      Constructor
 
   .. method:: on_epoch_begin(epoch, logs=None)
           
      Inherited method
 
   .. method:: custom_method
 
      Custom method

.. autofunction:: keras_callback.util_func

我终于找到了一个简单的解决方法:在本地构建,然后覆盖构建的CI 使用本地构建的页面。如果所需的页面不需要频繁重建,那么此解决方案可以节省大量时间对成员进行硬编码

台阶
  • 本地生成,而不在
    conf.py
    中导入
    autodoc\u mock\u

  • 将正确的网页(
    keras\u callback.html
    )复制到
    \u static
    文件夹

  • 重新启用
    autodoc\u mock\u导入

  • 添加
    cp
    命令以覆盖
    .gitlab CI.yml

  • 提交、推送和检查网页。为这个特别的工作 MWE(回购协议中未显示)
  • 缺点当然是维护人员必须重建该页面 无论何时更新,都可以手动执行。但这应该足以满足许多小型企业的需求 独立项目,因为文档发布通常只在
    开发的最后阶段。

    一种选择可能是放弃该类的autodoc,而是使用
    py:class
    py:method
    指令编写文档。好的,我已经读了那页,但是它缺少解释为什么使用它的上下文,从哪里开始,做什么,以及我应该期望的结果。你能给我一些提示吗?谢谢你的解释。我有7个这样的子类,平均每个类大约有10个成员函数。我真的需要用如此费劲的方式手动硬编码所有这些吗?如果是这样的话,我会非常震惊。顺便说一句,如果一周后没有更简单的选择出现,我会接受这个答案。
    image: python:3.7-alpine
    
    pages:
    script:
    - pip install sphinx sphinx-rtd-theme recommonmark
    - sphinx-build -d _build/doctrees . _build/html
    - mv _build/html public
    - cp _static/keras_callback.html public
    artifacts:
        paths:
        - public
    only:
    - master