from myproject import __version__
# ...
# The short X.Y version.
version = __version__
# The full version, including alpha/beta/rc tags.
release = version
# 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')}},
)
# contents of docs/conf.py
from importlib.metadata import version
release = version('myproject')
# for example take major/minor
version = '.'.join(release.split('.')[:2])
下面是他们对为什么不鼓励使用Sphinx的软件包的解释:
根本原因是,像Read the Docs这样的服务有时会出于充分的理由更改工作目录,并且使用已安装的元数据可以防止在那里使用不必要的易失性数据。*
6条答案
按热度按时间8mmmxcuj1#
最简单(也可能是最干净)的方法是为顶层包的
__init__.py
定义__version__
,然后导入该包并读取setup.py
和Sphinx项目的conf.py
中的版本。假设您的项目名为
myproject
。将当前版本移出
setup.py
,并使其成为myproject/__init__.py
中的变量:myproject/__init__.py
**:将
myproject
导入到项目的setup.py
中,并将硬编码版本替换为myproject.__version__
:在Sphinx项目的
conf.py
中,执行相同的操作。因此,按照以下代码行编辑生成的conf.py
:要查看一个库的示例,该库的功能与此非常相似,请查看
requests
模块(__init__.py
|setup.py
|conf.py
)。这将处理使用项目版本的自动生成文本(如文档首页的链接)。如果您想在特定的自定义位置使用您的版本,您可以使用
rst_epilog
指令动态插入conf.py
中定义的配置值。xfb7svmp2#
也许一个更简洁的选择是通过
setup.py
命令构建sphinx,如http://www.sphinx-doc.org/en/master/setuptools.html中所述:setup.py
然后使用构建文档
好处:
setup.py
成为版本号的单一来源whitzsjs3#
您可以查看
bumpversion
模块:“一个小的命令行工具,通过按正确的增量更新源代码中的所有版本字符串来简化软件的发布”
对于复杂的多文件操作,可以使用配置文件
.bumpversion.cfg
。f87krz0w4#
另一种方法是将
setuptools_scm
集成到项目中。在您
conf.py
中zpgglvta5#
下面是一个简单明了的解决方案,具有讽刺意味的是,它来自setuptools_scm PyPI page:
下面是他们对为什么不鼓励使用Sphinx的软件包的解释:
bwitn5fc6#
从pyproject.toml中提取信息
如果你使用
pyproject.toml
,你也可以用tomli在conf.py
中解析它,或者当你在 python ^3.11 上使用等价的tomllib。这样,您就可以从
pyproject.toml
中提取信息,并在您的sphinx文档配置中使用它。下面是一个简短的不完整示例,使用
tomli
,假设conf.py
位于
<project-root>/docs/source/conf.py
: