提取项目的“版本”变量

read-version的Python项目详细描述


Project Status: Active — The project has reached a stable, usable state and is being actively developed.https://travis-ci.org/jwodder/read_version.svg?branch=masterhttps://codecov.io/gh/jwodder/read_version/branch/master/graph/badge.svghttps://img.shields.io/pypi/pyversions/read_version.svgMIT Licensehttps://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg

GitHub |PyPI |Issues

为新项目创建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,
    ...
)

有人需要把这些都放进一个可重用的包中,对吗?好, 有人做了,这就是那个包裹。

安装

只要使用pip(你有pip,对吧?)安装 read_version

pip install read_version

用法

  1. 在开发环境中安装read_version

  2. pyproject.toml文件添加到项目中,声明read_version为 生成依赖项。(这是必要的,以便其他人可以建立您的 来自源的包;有关详细信息,请参见PEP 518)。 文件的内容应该如下:

    [build-system]
    requires = [
        "read_version ~= 0.1.0",
        "setuptools",
        "wheel"
    ]
    
  3. setup.py中,去掉样板文件__version__-查找 编码并替换为:

    from read_version import read_version
    
    setup(
        version = read_version('packagename', '__init__.py'),
        ...
    )
    
  4. 完成!

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__涉及更复杂的表达式将导致错误 被抚养成人。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Hibernate:jpamodelgen生成java而不是类   java如何在第二次活动结束后显示广告?   javascript如何在linux或windows上将java导出到jar   java One ArrayList添加了2个不同的选项   AmazonWeb服务如何在java中使用AWS Textract检索pdf中存在的表   java为什么RecycleView中的水平项在单击时不起作用?   java计算如果存在映射   java在捕获的组上应用正则表达式   如何使用Java在MySQL的同一个表中插入来自不同类的值   java字符串中最常见的字母(大写和小写)   Spring SessionBean实例正在由java中的多个用户共享   使用Spring Boot将@WebInitParam中的值外部化   java一创建线程就开始执行(多线程)   java是安卓所需的系统权限。意图行动给你打电话?