如何独立于构建系统从Python包源码目录提取版本号?
无需构建发行版提取Python包版本号的方法
当然有,以下是几种独立于构建系统、不用生成发行包就能拿到版本号的实用方法:
直接读取配置文件(适用于硬编码版本的包)
如果包的版本号直接写在pyproject.toml里(比如project.version字段),可以用Python自带的tomllib(3.11+)或第三方库tomli(低版本Python)读取:# Python 3.11+ import tomllib with open("pyproject.toml", "rb") as f: config = tomllib.load(f) print(config["project"]["version"])要是包还在用旧版的
setup.py硬写版本,也可以直接解析这个文件,但这种方式兼容性差,因为很多现代包已经不再硬编码版本了。利用PEP 517构建工具的元数据提取能力
你提到的build工具内部就是通过PEP 517规范提取元数据的,我们可以直接调用它的API来获取版本,不用实际构建发行版:
先确保安装了build:pip install build然后在包源码目录执行:
from build import ProjectBuilder from pathlib import Path builder = ProjectBuilder(Path(".")) print(builder.metadata["Version"])这个方法最通用,不管包用的是
setuptools、poetry还是其他PEP 517兼容的构建后端,都能正确拿到版本号。针对使用
setuptools-scm的包
很多包用setuptools-scm从Git标签自动生成版本,这种情况下可以直接调用setuptools-scm的API获取:
先安装setuptools-scm:pip install setuptools-scm然后执行:
from setuptools_scm import get_version print(get_version())
内容的提问来源于stack exchange,提问作者Mike T
相关产品推荐
相关产品推荐

