让sphinx使用setup.py中的版本

时间:2014-10-01 12:53:27

标签: python package python-sphinx

如果我sphinx-quickstart,我会被问及项目的版本。

我想避免为我的项目版本提供两个位置。

如何在python包装世界中做到这一点?

3 个答案:

答案 0 :(得分:18)

最简单(也可能最干净)的方法是为您的顶级软件包的__init__.py定义__version__,然后导入该软件包并读取setup.pyconf.py中的版本您的Sphinx项目myproject

因此,假设您的项目名为setup.py

将您当前的版本移出myproject/__init__.py,并将其变为myproject/__init__.py中的变量:

<强> # import foo # ... __version__ = '1.5'

myproject

在项目setup.py中导入myproject.__version__,并将硬编码版本替换为setup.py

<强> from setuptools import setup from myproject import __version__ project = "myproject" setup( name=project, version=__version__, # ... )

conf.py

在您的Sphinx项目conf.py中,执行相同的操作。因此,请按以下行编辑生成的docs/conf.py

<强> from myproject import __version__ # ... # The short X.Y version. version = __version__ # The full version, including alpha/beta/rc tags. release = version

conf.py

有关这样做的库的示例,请查看requests模块(__init__.py | setup.py | conf.py)。< / p>

这将处理使用项目版本的自动生成的文本(如指向文档首页的链接)。如果要在特定自定义位置使用您的版本,可以使用rst_epilog指令动态插入{{1}}中定义的配置值。

答案 1 :(得分:5)

也许更干净的选择是根据http://www.sphinx-doc.org/en/master/setuptools.html中所述的setup.py命令实际构建狮身人面像:

setup.py

# this is only necessary when not using setuptools/distribute
from sphinx.setup_command import BuildDoc
cmdclass = {'build_sphinx': BuildDoc}

name = 'My project'
version = '1.2'
release = '1.2.0'
setup(
    name=name,
    author='Bernard Montgomery',
    version=release,
    cmdclass=cmdclass,
    # these are optional and override conf.py settings
    command_options={
        'build_sphinx': {
            'project': ('setup.py', name),
            'version': ('setup.py', version),
            'release': ('setup.py', release),
            'source_dir': ('setup.py', 'doc')}},
)

然后使用构建文档

$ python setup.py build_sphinx

好处:

  • 使setup.py是版本号的唯一来源
  • 避免不必要地从项目文件夹中取出软件包

答案 2 :(得分:4)

您可以查看bumpversion模块:

“一个小型命令行工具,通过以正确的增量更新源代码中的所有版本字符串来简化发布软件”

您可以使用配置文件.bumpversion.cfg进行复杂的多文件操作。