13

遵循(希望)常见的做法,我有一个 Python 包,其中包含多个模块和一个单独scripts目录中的可执行脚本,如可以在此处看到的。

除了 optparse 提供的自动生成帮助之外,脚本的文档与 Sphinx 子目录中的包文档一起。我在尝试着:

  1. 从现有文档生成脚本的手册页
  2. 在发行版中包含手册页

我可以使用 Sphinx、man_pages设置和sphinx-build -b man. 所以我可以调用python setup.py build_sphinx -b man并在build/sphinx/man目录中生成手册页。

现在我希望能够将生成的手册页包含在分发 tarball 中,以便 GNU/Linux 打包程序可以找到它并将其安装到正确的位置。诸如此类的各种选项package_data似乎在这里不起作用,因为手册页在 Sphinx 生成之前不存在。这也适用于 i18n 文件(.movs.po文件)。

包含不属于源的文件MANIFEST.in似乎不正确。将生成的文件提交到源存储库的可能性看起来很糟糕,我想避免它。

应该有一种——最好只有一种——明显的方法来做到这一点。

4

4 回答 4

3

要在您的发行版中添加静态手册页,您可以将它们添加到MANIFEST文件中。

recursive-include docs *.txt
recursive-include po *.po
recursive-include sample_data *
recursive-include data *.desktop *.svg *.png
include COPYING.txt
include README.txt
recursive-include man_pages

man_pages包含生成的手册页副本的目录在哪里。

另见: http: //linuxmanpages.com/man1/man.1.php

于 2013-10-29T20:37:33.773 回答
1

我可能会在调用 distutils.core.setup 之前让 setup.py 生成手册页。请记住,setup.py 一级是 python 代码。即使没有安装 sphinx,您也想测试并确保它可以工作(除非您需要 sphinx)。因此,如果手册页已经存在并且 sphinx 不可用,请不要失败。这样,在没有 sphinx 的情况下解压您的源代码分发包的人仍然可以运行 setup.py build 和其他目标。

另一种选择是检查手册页,但像你一样,我觉得那很难看。

于 2013-11-21T01:30:18.563 回答
0

我之前看到的事情是为您的文档提供构建目标,并在 README 文件中明确说明文档包含手册页并且可以通过运行该构建目标来构建。包维护者然后在包创建过程中构建您的文档并打包它们。

fedora 18 rpm 适用于例如,用于hawkey我还看到其他 rpm 在构建源代码的同时遵循构建文档的模型,然后将其打包。

于 2013-04-06T15:57:27.720 回答
0

这个问题值得一个更好的答案,不仅仅是因为这个问题已经困扰了我一段时间。所以这是我的实现。

  • 从我的 github 项目下载build_manpage.py(这里是build_manpage 的链接
  • 将其保存在可以将其导入 setup.py 的位置

    # inside setup.py
    from setuptools import setup
    from build_manpage import BuildManPage
    
    ...
    ...
    
    setup(
    ...
    ...
    cmdclass={
    'build_manpage': BuildManPage,
    )
    

现在您可以像这样调用setup.py

$ python setup.py build_manpage --output=prog.1 --parser=yourmodule:argparser
于 2014-06-11T17:32:11.160 回答