跳转到主要内容

PyPI 批量发布版本清理工具

项目描述

PyPI 批量发布版本清理工具

PyPI Cleanup Version PyPI Cleanup Python Versions Build Status PyPI Cleanup Downloads Per Day PyPI Cleanup Downloads Per Week PyPI Cleanup Downloads Per Month

概述

PyPI 批量发布版本清理工具(pypi-cleanup)旨在批量删除与指定模式匹配的 PyPI 发布版本。此实用程序在 CI/CD 方法在版本发布之间产生大量临时 .devN 预发布 时最有用。

能够清理过去的 .devN 垃圾有助于 PyPI 减少存储需求,并使发布历史整齐有序。

警告

此实用程序具有破坏性,可能会损坏您的项目发布并使项目在 PyPI 上无法访问。

本工具提供基于“现状”的基础,不提供任何类型的保证或条件,无论是明示的还是默示的,包括但不限于关于所有权、非侵权、适销性或特定用途适用性的任何保证或条件。

详细信息

默认包发布版本选择模式为 r".*dev\d+$"

可以通过环境变量 PYPI_CLEANUP_PASSWORD 传递认证密码。否则,将提示您输入它。

支持使用 TOTP 进行认证。

示例

$ pypi-cleanup --help
usage: pypi-cleanup [-h] [-u USERNAME] -p PACKAGES [-t URL] [-r PATTERNS | --leave-most-recent-only] [--query-only] [--do-it] [--delete-project] [-y] [-d DAYS] [-v]

PyPi Package Cleanup Utility v0.1.8

options:
  -h, --help            show this help message and exit
  -u USERNAME, --username USERNAME
                        authentication username (default: None)
  -p PACKAGES, --package PACKAGES
                        PyPI package name (default: None)
  -t URL, --host URL    PyPI <proto>://<host> prefix (default: https://pypi.ac.cn/)
  -r PATTERNS, --version-regex PATTERNS
                        regex to use to match package versions to be deleted (default: None)
  --leave-most-recent-only
                        delete all releases except the *most recent* one, i.e. the one containing the most recently created files (default: False)
  --query-only          only queries and processes the package, no login required (default: False)
  --do-it               actually perform the destructive delete (default: False)
  --delete-project      actually perform the destructive delete that will remove all versions of the project (default: False)
  -y, --yes             confirm extremely dangerous destructive delete (default: False)
  -d DAYS, --days DAYS  only delete releases **matching specified patterns** where all files are older than X days (default: 0)
  -v, --verbose         be verbose (default: 0)

查询模式

查询模式是一种安全模式,它仅显示所有匹配的包版本并退出,无需进行认证或移除安全措施

$ pypi-cleanup -p karellen-llvm-core -p karellen-llvm-clang -r '.*rc\d.*' --query-only
INFO:root:Running in QUERY-ONLY mode
INFO:root:Will use the following patterns [re.compile('.*rc\\d.*')] on package 'karellen-llvm-core'
INFO:root:Found the following releases of package 'karellen-llvm-core' to delete:
INFO:root: 19.1.0.0rc1.post62
INFO:root: 19.1.0.0rc2
INFO:root: 19.1.0.0rc2.post43
INFO:root: 19.1.0.0rc2.post45
INFO:root: 19.1.0.0rc2.post52
INFO:root: 19.1.0.0rc2.post59
INFO:root: 19.1.0.0rc2.post69
INFO:root: 19.1.0.0rc3
INFO:root: 19.1.0.0rc3.post12
INFO:root: 19.1.0.0rc3.post50
INFO:root: 19.1.0.0rc3.post53
INFO:root: 19.1.0.0rc4
INFO:root: 19.1.0.0rc4.post6
INFO:root: 19.1.0.0rc4.post13
INFO:root: 19.1.0.0rc4.post18
INFO:root:Query-only mode - exiting

定期清理开发工件

首先不进行 --do-it 确认,即在干运行模式下,包括认证并尽可能地接近删除而不实际执行删除

$ pypi-cleanup -u arcivanov -p pybuilder
INFO:root:Running in DRY RUN mode
INFO:root:Will use the following patterns [re.compile('.*\\.dev\\d+$')] on package 'pybuilder'
INFO:root:Found the following releases of package 'pybuilder' to delete:
INFO:root: 0.13.13.dev20240604074936
INFO:root: 0.13.14.dev20240814015648
Password: 
Authentication code: 933344
INFO:root:Would be deleting 'pybuilder' version 0.13.13.dev20240604074936, but not doing it!
INFO:root:Would be deleting 'pybuilder' version 0.13.14.dev20240814015648, but not doing it!

现在实际删除指定的包

$ pypi-cleanup -u arcivanov -p pybuilder --do-it
WARNING:root:!!! POSSIBLE DESTRUCTIVE OPERATION !!!
INFO:root:Will use the following patterns [re.compile('.*\\.dev\\d+$')] on package 'pybuilder'
INFO:root:Found the following releases of package 'pybuilder' to delete:
INFO:root: 0.13.13.dev20240604074936
INFO:root: 0.13.14.dev20240814015648
Password: 
Authentication code: 123456
WARNING:root:!!! WILL ACTUALLY DELETE THINGS - LAST CHANCE TO CHANGE YOUR MIND !!!
WARNING:root:Sleeping for 5 seconds - Ctrl-C to abort!
INFO:root:Deleting 'pybuilder' version 0.13.13.dev20240604074936
INFO:root:Deleted 'pybuilder' version 0.13.13.dev20240604074936
INFO:root:Deleting 'pybuilder' version 0.13.14.dev20240814015648
INFO:root:Deleted 'pybuilder' version 0.13.14.dev20240814015648

使用自定义正则表达式模式

$ pypi-cleanup -u arcivanov -p geventmp -r '.*\\.dev1$'
WARNING:root:
WARNING:
        You're using custom patterns: [re.compile('.*\\\\.dev1$')].
        If you make a mistake in your patterns you can potentially wipe critical versions irrecoverably.
        Make sure to test your patterns before running the destructive cleanup.
        Once you're satisfied the patterns are correct re-run with `-y`/`--yes` to confirm you know what you're doing.
        Goodbye.
$ pypi-cleanup -u arcivanov -p geventmp -r '.*\\.dev1$' -y
Password:
WARNING:root:RUNNING IN DRY-RUN MODE
INFO:root:Will use the following patterns [re.compile('.*\\.dev1$')] on package geventmp
Authentication code: 123456
INFO:root:Deleting geventmp version 0.0.1.dev1

删除除最新版本之外的所有版本

列出将要删除的所有版本(除最新版本外)

$ pypi-cleanup -p pypi-cleanup --leave-most-recent-only --query-only
INFO:root:Running in QUERY-ONLY mode
INFO:root:Will only leave the MOST RECENT version of the package 'pypi-cleanup'
INFO:root:Leaving the MOST RECENT version for 'pypi-cleanup': 0.1.7 - 2024-06-25T05:53:47.930884+0000
INFO:root:Found the following releases of package 'pypi-cleanup' to delete:
INFO:root: 0.0.1
INFO:root: 0.0.2
INFO:root: 0.0.3
INFO:root: 0.1.0
INFO:root: 0.1.1
INFO:root: 0.1.2
INFO:root: 0.1.3
INFO:root: 0.1.4
INFO:root: 0.1.5
INFO:root: 0.1.6
INFO:root:Query-only mode - exiting

删除除最新版本之外的所有内容需要拉取安全措施

$ pypi-cleanup -p pypi-cleanup --leave-most-recent-only
WARNING:root:
WARNING:
        You're trying to delete ALL versions of the package EXCEPT for the *most recent one*, i.e.
        the one with the most recent (by the wall clock) files, disregarding the actual version numbers
        or versioning schemes!

        You can potentially wipe critical versions irrecoverably.
        Make sure this is what you really want before running the destructive cleanup.
        Once you're sure you want to delete all versions except the most recent one,
        re-run with `-y`/`--yes` to confirm you know what you're doing.
        Goodbye.

删除多个包

通过添加额外的 -p 参数来指定多个包,如下所示

$ pypi-cleanup -p karellen-llvm-core -p karellen-llvm-clang -p karellen-llvm-lldb -p karellen-llvm-toolchain-tools -r '.*rc\d.*' -y -u karellen --do-it
WARNING:root:!!! POSSIBLE DESTRUCTIVE OPERATION !!!
INFO:root:Will use the following patterns [re.compile('.*rc\\d.*')] on package 'karellen-llvm-core'
INFO:root:Will use the following patterns [re.compile('.*rc\\d.*')] on package 'karellen-llvm-clang'
INFO:root:Will use the following patterns [re.compile('.*rc\\d.*')] on package 'karellen-llvm-lldb'
INFO:root:Will use the following patterns [re.compile('.*rc\\d.*')] on package 'karellen-llvm-toolchain-tools'
INFO:root:Found the following releases of package 'karellen-llvm-core' to delete:
INFO:root: 19.1.0.0rc1.post62
INFO:root: 19.1.0.0rc2
INFO:root: 19.1.0.0rc2.post43
INFO:root: 19.1.0.0rc2.post45
INFO:root: 19.1.0.0rc2.post52
INFO:root: 19.1.0.0rc2.post59
INFO:root: 19.1.0.0rc2.post69
INFO:root: 19.1.0.0rc3
INFO:root: 19.1.0.0rc3.post12
INFO:root: 19.1.0.0rc3.post50
INFO:root: 19.1.0.0rc3.post53
INFO:root: 19.1.0.0rc4
INFO:root: 19.1.0.0rc4.post6
INFO:root: 19.1.0.0rc4.post13
INFO:root: 19.1.0.0rc4.post18
INFO:root:Found the following releases of package 'karellen-llvm-clang' to delete:
INFO:root: 19.1.0.0rc1.post62
INFO:root: 19.1.0.0rc2
INFO:root: 19.1.0.0rc2.post43
INFO:root: 19.1.0.0rc2.post45
INFO:root: 19.1.0.0rc2.post52
INFO:root: 19.1.0.0rc2.post59
INFO:root: 19.1.0.0rc2.post69
INFO:root: 19.1.0.0rc3
INFO:root: 19.1.0.0rc3.post12
INFO:root: 19.1.0.0rc3.post50
INFO:root: 19.1.0.0rc3.post53
INFO:root: 19.1.0.0rc4
INFO:root: 19.1.0.0rc4.post6
INFO:root: 19.1.0.0rc4.post13
INFO:root: 19.1.0.0rc4.post18
INFO:root:Found the following releases of package 'karellen-llvm-lldb' to delete:
INFO:root: 19.1.0.0rc4.post6
INFO:root: 19.1.0.0rc4.post13
INFO:root: 19.1.0.0rc4.post18
INFO:root:Found the following releases of package 'karellen-llvm-toolchain-tools' to delete:
INFO:root: 19.1.0.0rc1.post62
INFO:root: 19.1.0.0rc2
INFO:root: 19.1.0.0rc2.post43
INFO:root: 19.1.0.0rc2.post45
INFO:root: 19.1.0.0rc2.post52
INFO:root: 19.1.0.0rc2.post59
INFO:root: 19.1.0.0rc2.post69
INFO:root: 19.1.0.0rc3
INFO:root: 19.1.0.0rc3.post12
INFO:root: 19.1.0.0rc3.post50
INFO:root: 19.1.0.0rc3.post53
INFO:root: 19.1.0.0rc4
INFO:root: 19.1.0.0rc4.post6
INFO:root: 19.1.0.0rc4.post13
INFO:root: 19.1.0.0rc4.post18
Password: 
Authentication code: 123456
WARNING:root:!!! WILL ACTUALLY DELETE THINGS - LAST CHANCE TO CHANGE YOUR MIND !!!
WARNING:root:Sleeping for 5 seconds - Ctrl-C to abort!
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc1.post62
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc1.post62
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc2
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc2
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc2.post43
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc2.post43
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc2.post45
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc2.post45
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc2.post52
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc2.post52
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc2.post59
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc2.post59
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc2.post69
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc2.post69
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc3
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc3
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc3.post12
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc3.post12
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc3.post50
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc3.post50
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc3.post53
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc3.post53
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc4
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc4
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc4.post6
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc4.post6
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc4.post13
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc4.post13
INFO:root:Deleting 'karellen-llvm-core' version 19.1.0.0rc4.post18
INFO:root:Deleted 'karellen-llvm-core' version 19.1.0.0rc4.post18
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc1.post62
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc1.post62
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc2
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc2
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc2.post43
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc2.post43
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc2.post45
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc2.post45
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc2.post52
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc2.post52
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc2.post59
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc2.post59
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc2.post69
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc2.post69
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc3
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc3
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc3.post12
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc3.post12
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc3.post50
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc3.post50
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc3.post53
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc3.post53
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc4
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc4
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc4.post6
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc4.post6
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc4.post13
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc4.post13
INFO:root:Deleting 'karellen-llvm-clang' version 19.1.0.0rc4.post18
INFO:root:Deleted 'karellen-llvm-clang' version 19.1.0.0rc4.post18
INFO:root:Deleting 'karellen-llvm-lldb' version 19.1.0.0rc4.post6
INFO:root:Deleted 'karellen-llvm-lldb' version 19.1.0.0rc4.post6
INFO:root:Deleting 'karellen-llvm-lldb' version 19.1.0.0rc4.post13
INFO:root:Deleted 'karellen-llvm-lldb' version 19.1.0.0rc4.post13
INFO:root:Deleting 'karellen-llvm-lldb' version 19.1.0.0rc4.post18
INFO:root:Deleted 'karellen-llvm-lldb' version 19.1.0.0rc4.post18
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc1.post62
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc1.post62
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post43
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post43
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post45
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post45
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post52
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post52
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post59
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post59
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post69
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc2.post69
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3.post12
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3.post12
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3.post50
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3.post50
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3.post53
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc3.post53
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4.post6
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4.post6
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4.post13
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4.post13
INFO:root:Deleting 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4.post18
INFO:root:Deleted 'karellen-llvm-toolchain-tools' version 19.1.0.0rc4.post18

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定要选择哪一个,请了解更多关于 安装包 的信息。

源分布

pypi_cleanup-0.1.8.tar.gz (19.4 kB 查看哈希值)

上传时间

构建分布

pypi_cleanup-0.1.8-py3-none-any.whl (14.9 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面