如果我sphinx-quickstart
,我会被问及项目的版本。
我想避免为我的项目版本提供两个位置。
如何在python包装世界中做到这一点?
答案 0 :(得分:18)
最简单(也可能最干净)的方法是为您的顶级软件包的__init__.py
定义__version__
,然后导入该软件包并读取setup.py
和conf.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)