遵循(希望)常见做法,我有一个Python包,其中包含多个模块和一个可执行脚本,位于单独的scripts
目录中,如here所示。
除了optparse提供的自动生成的帮助之外,脚本的文档与Sphinx子目录中的包文档一起使用。我想:
我可以轻松地使用Sphinx,man_pages
设置和sphinx-build -b man
执行#1。所以我可以调用python setup.py build_sphinx -b man
并在build/sphinx/man
目录中生成手册页。
现在我希望能够将生成的手册页包含在分发tarball中,因此GNU / Linux打包程序可以找到它并将其安装到正确的位置。像package_data
这样的各种选项似乎在这里不起作用,因为在由Sphinx生成之前,手册页不存在。这也适用于i18n文件(.mo
vs .po
文件)。
包含MANIFEST.in
中不属于来源的文件似乎不对。将生成的文件提交到源存储库的可能性看起来很糟糕,我想避免它。
应该有一个 - 最好只有一个 - 显而易见的方法。
答案 0 :(得分:2)
要在您的发行版中添加静态手册页,您可以将它们添加到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
是包含生成的手册页副本的目录。
答案 1 :(得分:1)
我会在调用distutils.core.setup之前导致setup.py生成手册页。请记住,一个级别的setup.py是python代码。您想要测试并确保即使未安装sphinx也能正常工作(除非您需要sphinx)。因此,如果手册页已经存在且sphinx不可用,请不要失败。这样,在没有sphinx的情况下解压缩源代码的人仍然可以运行setup.py构建和其他目标。
另一种选择是检查手册页,但是和你一样,我觉得很难看。
答案 2 :(得分:0)
我之前看到过的事情是为您的文档提供构建目标,并在README文件中明确说明文档包含手册页,并且可以通过运行该构建目标来构建。然后,包维护者会在包创建过程中构建您的文档并打包它们。
例如,hawkey的fedora 18 rpm以这种方式构建。我还看到其他rpms在构建源代码的同时遵循构建文档的模型,然后打包它。
答案 3 :(得分:0)
这个问题应该得到更好的答案,而不仅仅是因为这个问题困扰了我一段时间。所以这是我的实现。
build_manpage.py
将其保存在您可以将其导入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