chronaxis._version
源码基线:8904c2f744951857659abd40aaa3535d57faf53c
1"""取得当前这份软件的发行版本,不查询其他安装副本或业务输入。23源码检出从自身项目的pyproject.toml读取;构建包使用构建时自动生成的版本模块。4只依赖标准库且不写文件,缺失或损坏的版本资料明确报错,不回退为另一版本。5"""67from pathlib import Path8import tomllib91011def software_version() -> str:12 """返回当前源码或安装包版本;版本资料缺失、项目不符或版本为空时抛RuntimeError。1314 参数: 无。返回: 非空版本字符串。读取最多一份本地项目文件或本包生成模块;15 不读取全局distribution元数据,不依赖调用者工作目录,不修改任何文件。16 """17 package = Path(__file__).resolve().parent18 root = package.parent.parent19 # 只有本文件确在该项目的src/chronaxis下,才把其pyproject视为源码版本来源。20 project_file = root / 'pyproject.toml'21 if package == root / 'src' / 'chronaxis' and project_file.is_file():22 try:23 with project_file.open('rb') as handle:24 project = tomllib.load(handle)['project']25 if project['name'] != 'chronaxis':26 raise ValueError('项目名称不是chronaxis')27 version = project['version']28 except (OSError, KeyError, TypeError, ValueError) as error:29 raise RuntimeError('无法从当前Chronaxis源码的pyproject.toml读取版本') from error30 else:31 # 构建器写入的模块随wheel安装;不向仓库路径或其他已安装包寻找备用版本。32 try:33 from ._build_version import VERSION34 except ImportError as error:35 raise RuntimeError('当前Chronaxis缺少对应项目版本或构建版本信息,请使用完整源码或安装包') from error36 version = VERSION37 if type(version) is not str or not version or version != version.strip():38 raise RuntimeError('当前Chronaxis版本信息必须是非空且无首尾空白的文本')39 return version40