自动更新Python发布信息
项目描述
由于各种原因,您可能想知道哪些Python版本是“当前”的
为tox提供pyXY目标的列表
从您生成并上传到PyPI的.whl文件中删除不再支持的Python版本
确定要包含在包信息中的哪个‘编程语言 :: Python ::’分类器
检查您是否在所有服务器上安装了Python的最新微版本
从各种PEP(通常格式略有不同)、python.org和其他网页中提取此类信息很繁琐。此软件包提供了一种名为python_release_info的命令行实用工具,您可以在脚本、makefile等中使用它,并提供了一个程序接口来获取发布信息。
发布信息从互联网检索,可以每天更新(无需更新软件包本身)。基于Python的构建脚本可以检查是否有新版本可供下载,并根据需要进行操作。还可以查询预发布信息。
以下是从2020年3月28日的一个命令行会话(您可以通过指定--dd 2020-03-28来模拟)
$ /opt/python/3.8.2/bin/python -m venv --copies /opt/util/pri $ source /opt/util/pri/bin/activate (pri) $ pip install -U -q pip (pri) $ pip install -q release_info (pri) $ python_release_info current 2.7.17 3.5.9 3.6.10 3.7.7 3.8.2 (pri) $ python_release_info pre 3.9.0.a.5 (pri) $ echo $? # 0 -> updated, 1 -> not updated 1 (pri) $ mkdir -p /opt/util/pri/tmp (pri) $ python_release_info --dir /opt/util/pri/tmp update --extract (pri) $ ls --classify /opt/util/pri/tmp Python-3.8.2/ Python-3.8.2.tar.xz
如果提供md5信息(对于所有当前和未来的版本都是真实的),则检查下载的tar文件。
脚本允许使用“一站式”(更新、下载、提取构建)操作
python_release_info update --dir /data/DOWNLOAD/cpython --extract --build='make -f ../Makefile'
该脚本可以定期运行,例如通过crontab。它会检查是否有新版本,如果有,则将.tar.xz文件下载到/data/DOWNLOAD/cpython,并检查下载文件的md5校验和。然后,它切换到该目录,并解压tar文件。之后,它切换到解压创建的顶级目录,设置环境变量PYTHONVERSION为提取的版本,并执行--build选项的参数。
如果这个一站式解决方案不能满足您的需求,您可以简单地编写一个适合您环境的命令行或Python程序。
配置文件
您的配置文件通常是~/.config/python_release_info/config.ini(即遵循XDG),除非是Windows:%APPDATA%/python_release_info/config.ini。
该文件的[INFO]部分允许您添加或覆盖自动更新信息中的数据
[INFO] add = xxx.pon overwrite = yyy.pon
您可以设置这些条目,也可以不设置。默认情况下,这两个条目都被注释掉了。文件必须与release_info.pon的层次结构相同,因此最好复制该文件,删除不相关的部分,然后更新其余部分。
两者的区别在于,当使用add时,从那里加载的数据不会覆盖从release_info.pon加载的已有“路径”到叶节点数据。您应该为预期将包含在未来的自动更新中的信息使用add,并且在它被包含时,您希望使用该信息。例如,当您发现数据中存在错误,并且无法等待它在release_info存储库中修复并自动下载时,您应该使用overwrite。
因此,如果自动更新的release_info.pon(实际上有更多数据)中包含以下内容
dict( cpython={ (3, 8): { (3, 8, 0): dict(rel=date(2019, 10, 14)), (3, 8, 1): dict(rel=date(2019, 12, 18)), (3, 8, 2): dict(rel=date(2020, 2, 24), md5='e9d6ebc92183a177b8e8a58cad5b8d67'), }, } )
并且您的xxx.pon文件(将要添加)包含以下内容
dict( cpython={ (3, 8): { (3, 8, 0): dict(md5='dbac8df9d8b9edc678d0f4cacdb7dbb0'), (3, 8, 1): dict(rel=date(2019, 12, 25), md5='b3fb85fd479c0bf950c626ef80cacb57'), (3, 8, 3): dict(rel=date(2020, 5, 4)), }, } )
那么结果将是
dict( cpython={ (3, 8): { (3, 8, 0): dict(rel=date(2019, 10, 14), md5='dbac8df9d8b9edc678d0f4cacdb7dbb0'), (3, 8, 1): dict(rel=date(2019, 12, 18), md5='b3fb85fd479c0bf950c626ef80cacb57'), (3, 8, 2): dict(rel=date(2020, 2, 24), md5='e9d6ebc92183a177b8e8a58cad5b8d67'), (3, 8, 3): dict(rel=date(2020, 5, 4)), }, } )
但是,如果相同的内容在yyy.pon(将要覆盖)中,那么结果将是
dict( cpython={ (3, 8): { (3, 8, 0): dict(rel=date(2019, 10, 14), md5='dbac8df9d8b9edc678d0f4cacdb7dbb0'), (3, 8, 1): dict(rel=date(2019, 12, 25), md5='b3fb85fd479c0bf950c626ef80cacb57'), (3, 8, 2): dict(rel=date(2020, 2, 24), md5='e9d6ebc92183a177b8e8a58cad5b8d67'), (3, 8, 3): dict(rel=date(2020, 5, 4)), }, } )
区别在于3.8.1版本发布的日期。
设置默认值
您可以在配置文件的DEFAULTS部分设置全局--dir选项的默认值
[DEFAULTS] dir = /opt/util/pri/tmp
这也适用于子解析器,例如,您可以始终强制下载
[DEFAULTS.DOWNLOAD] force = True
配置文件中的部分名称将被转换为小写,因此您也可以使用[defaults.download]或[Defaults.Download]。
键/值条目不会被转换,您的键必须与选项(减去--)完全匹配,才能从配置文件设置默认值。
命令行上提供的选项覆盖配置文件中的选项(如果配置文件中设置了强制,则目前无法从命令行取消强制)
API
您可以使用程序中的发布信息
import pathlib from release_info import release_info def download_and_extract_latest_micro_versions_non_end_of_life(): ri = release_info() ri.download_data() latest = None for version in ri.find_current(): url = ri.src_url(version) print(version, url) # list the versions found latest = version # extract the last of the versions found path = pathlib.Path('/var/tmp') ri.download(latest, dir=path, extract=True) print(list(path.glob('Python*'))) def download_and_extract_new_versions_only(): ri = release_info() for version in ri.download_data(): path = pathlib.Path('/var/tmp/new') ri.download(latest, dir=path, extract=True) download_and_extract_latest_micro_versions_non_end_of_life()
显示
(3, 7, 12) https://pythonlang.cn/ftp/python/3.7.12/Python-3.7.12.tar.xz (3, 8, 12) https://pythonlang.cn/ftp/python/3.8.12/Python-3.8.12.tar.xz (3, 9, 10) https://pythonlang.cn/ftp/python/3.9.10/Python-3.9.10.tar.xz (3, 10, 2) https://pythonlang.cn/ftp/python/3.10.2/Python-3.10.2.tar.xz [PosixPath('/var/tmp/Python-3.10.1'), PosixPath('/var/tmp/Python-3.10.1.tar.xz'), PosixPath('/var/tmp/Python-3.10.2'), PosixPath('/var/tmp/Python-3.10.2.tar.xz')]
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。