【发布时间】:2020-04-11 20:37:00
【问题描述】:
我有一个项目,我通过git 标签管理版本。
然后,我使用setuptools_scm 在我的setup.py 中获取此信息,并生成一个文件(_version.py),该文件在为pip 生成轮子时包含在内。
git 未跟踪此文件,因为:
- 与
git收集的信息相同 - 这会造成循环情况,即构建轮子会修改版本,从而更改源代码并生成新版本
现在,当我构建文档时,从_version.py 获取这个版本变得很自然,这一切都在本地运行良好。
但是,当我尝试在 ReadTheDocs 中执行此操作时,文档的构建失败,因为 git 未跟踪 _version.py,因此 ReadTheDocs 在从存储库中获取源时找不到它。
EDIT:我已经尝试使用duplicate中提出的方法,这与setuptools_scm在文档中指出的相同,即在@987654334中使用@:
from pkg_resources import get_distribution
__version__ = get_distribution('numeral').version
... # I use __version__ to define Sphinx variables
但我明白了:
pkg_resources.DistributionNotFound:未找到“数字”分布,应用程序需要此分布
(同样,在本地构建文档可以正常工作。)
如果不通过在两个地方维护版本号,我该如何解决这个问题?
【问题讨论】:
-
这能回答你的问题吗? readthedocs and setuptools scm version wrong
-
@sinoroc 感谢您的建议,但这似乎是一个不同的问题。我没有得到版本根本。
-
您的
readthedocs.yml是什么?_version.py究竟是如何生成的?你会覆盖setuptools_scm默认值吗? -
我从未使用过类似的设置。但是根据我对说明的理解,其目的似乎是忽略
setuptools_scm自动生成的_version.py,而是用import pkg_resources; pkg_resources.get_distribution('myproject').version编写自己的解决方案。实际上,现在我会使用以下内容:import importlib_metadata; importlib_metadata.version('myproject'). -
另一方面,真的有什么可做的吗?
readthedocs.org似乎从 git 标记中获取版本号,类似于setuptools_scm的做法,所以两者都应该以相同的版本号结束,而且应该没问题。我是不是误会了什么?您能否澄清以下几点:“现在,当我构建文档时,从_version.py获取此版本变得很自然”?
标签: python python-sphinx setuptools read-the-docs setuptools-scm