Phi*_*ing 5 python versioning setuptools
为什么我必须在源代码中嵌入代码版本,有什么实际原因吗?显然我感兴趣setup.py但也有一些用途__version__。通过“嵌入源代码”,我的意思是我必须将版本号作为文本写入文件中,而不是通过其他方式填充 python 字段。
在其他语言中,我已经设置了构建脚本以了解 git 标签,然后完全通过标签管理版本号。这意味着 repo 中永远不会提交“修改版本号”。我所要做的就是标记新版本的提交并运行构建。
因此,作为一个理论示例,我可能会:
def _get_version()
command = ['git', 'describe', '--tags', '--match' 'versions/[0-9]*.[0-9]*']
result = subprocess.run(command, stdout=subprocess.PIPE).stdout.decode('utf-8')
return result.replace('-', '+', 1).replace('versions/', '')
setuptools.setup(
name="example-pkg-YOUR-USERNAME-HERE", # Replace with your own username
version=_get_version(),
author="Example Author",
author_email="author@example.com",
description="A small example package",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/pypa/sampleproject",
packages=setuptools.find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires='>=3.6',
)
Run Code Online (Sandbox Code Playgroud)
我不清楚的是这是否有效。是setuptools.setup在上传到包存储库之前还是由第三方下载时解析的结果?当然,git repo 仅在上传之前可用,而不是在其他人通过 pip 下载包时可用。
同样,我认为如果应用于__version__文件将完全无法填充,我是否正确?
从技术上讲,您不必将版本嵌入到您的包中。将版本传递给setuptools.setup()将确保它将保存在包元数据中以供打包机制处理(例如 setuptools、pip、诗歌等)。
将它包含在包中被认为是一种很好的做法,因为当您编写需要检查库版本的代码时它可能很有用(__version__“dundler”在PEP 8 中首次提到并在PEP 396 中进行了澄清),但可能不再需要,因为 Python 3.8 嵌入了importlib.metadata:
>>> from importlib.metadata import version
>>> version("wheel")
'0.35.1'
Run Code Online (Sandbox Code Playgroud)
因此,您的解决方案可以正常工作,但我建议您改用setuptools-scm,这将阻止您自己管理子流程。
| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |