Python:在基于distutils的项目中安装手册页

19 投票
2 回答
2789 浏览
提问于 2025-04-16 03:48

我有一个Python项目,主要是一些命令行脚本和一个辅助包。因为这些脚本有很多命令行选项,所以我决定为每个脚本创建一个手册页,并使用ronn(http://rtomayko.github.com/ronn/)来用Markdown写手册并生成mdoc。

我的问题是:在基于distutils的项目中,怎么生成和安装手册页?

我想出了一个解决方案:创建一个简单的install.sh脚本,用来生成和安装手册页。我在重载的'install'命令中调用这个脚本,并传递指定的前缀给它……你可以在这里查看实际代码:http://github.com/novel/lc-tools

不过我对这个解决方案不太满意,因为为了这个简单的任务,我还得在setup.py中添加一些小改动,并且还要实现一个shell脚本。而且,我使用的是${PREFIX}/share/man作为手册页的路径,这在所有系统上都不正确,比如FreeBSD似乎把第三方的手册页安装到/usr/local/man(也就是说没有share/)。

有没有更优雅的方法来做到这一点?

2 个回答

2

distutils这个工具不支持生成手册页。为了实现这个功能,有人写了一些扩展,通常是通过自定义的distutils命令来实现的。比如,Ubuntu有一个叫做python-distutils-extra的工具。

而distutils2将会支持安装手册页。

2

你在setup.py里的小技巧真不错……另外,你还可以添加一个特别的man_prefix选项,这个选项可以在设置时传入,用来改变手册的路径。

你可以这样做:

class lc_install(install):
    description = "Custom Install Process"

    user_options= install.user_options[:]
    user_options.extend([('manprefix=', None, 'MAN Prefix Path')])

def initialize_options(self):
    self.manprefix = None
    install.initialize_options(self)
def finalize_options(self):
    if self.manprefix is None :
        self.manprefix = "DEFAULT MAN PREFIX PATH IF THE OPTION IS NOT SET"
    install.finalize_options(self)

def run(self):
    .... # Your run method

撰写回答