提取项目的“版本”变量
read-version的Python项目详细描述
为新项目创建setup.py时,您是否总是发现自己 编写相同的代码块来解析项目的__version__。 消息来源?像这样的?
with open(join(dirname(__file__), 'package_name', '__init__.py')) as fp: for line in fp: m = re.search(r'^\s*__version__\s*=\s*([\'"])([^\'"]+)\1\s*$', line) if m: version = m.group(2) break else: raise RuntimeError('Unable to find own __version__ string') setup( version = version, ... )
有人需要把这些都放进一个可重用的包中,对吗?好, 有人做了,这就是那个包裹。
用法
在开发环境中安装read_version。
将pyproject.toml文件添加到项目中,声明read_version为 生成依赖项。(这是必要的,以便其他人可以建立您的 来自源的包;有关详细信息,请参见PEP 518)。 文件的内容应该如下:
[build-system] requires = [ "read_version ~= 0.1.0", "setuptools", "wheel" ]
在setup.py中,去掉样板文件__version__-查找 编码并替换为:
from read_version import read_version setup( version = read_version('packagename', '__init__.py'), ... )
完成!
API
read_version导出一个函数,也名为read_version,其 签名是:
read_version(*filepath, variable='__version__', default=NOTHING)
read_version()接受一个或多个指向python的文件路径组件 要分析的源文件。路径组件将与 os.path.join(),然后,如果路径不是绝对的,则指向 包含调用read_version()的脚本的目录将被前置到 这条路。(不再需要join(dirname(__file__), ...)样板文件!) read_version()然后解析给定的python文件并搜索 为名为__version__的变量的任何赋值分析树,返回 最后分配的值。
可以将variable关键字参数设置为其他变量的名称 而不是__version__来搜索另一个变量的赋值。
如果找不到变量的赋值,则引发ValueError。到 如果发生这种情况,则返回默认值,设置default关键字 争论。
限制
read_variable只查找发生在 模块,任何模块的外部。
只支持文字值的赋值;赋值给 __version__涉及更复杂的表达式将导致错误 被抚养成人。