# PyPI Bulk Release Version Cleanup Utility
[![PyPI Cleanup Version](https://img.shields.io/pypi/v/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)
[![PyPI Cleanup Python Versions](https://img.shields.io/pypi/pyversions/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)
[![Build Status](https://img.shields.io/github/actions/workflow/status/arcivanov/pypi-cleanup/pypi-cleanup.yml?branch=master)](https://github.com/arcivanov/pypi-cleanup/actions/workflows/pypi-cleanup.yml)
[![PyPI Cleanup Downloads Per Day](https://img.shields.io/pypi/dd/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)
[![PyPI Cleanup Downloads Per Week](https://img.shields.io/pypi/dw/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)
[![PyPI Cleanup Downloads Per Month](https://img.shields.io/pypi/dm/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)
## Overview
PyPI Bulk Release Version Cleanup Utility (`pypi-cleanup`) is designed to bulk-delete releases from PyPI that match
specified patterns.
This utility is most useful when CI/CD method produces a swarm of temporary
[.devN pre-releases](https://www.python.org/dev/peps/pep-0440/#developmental-releases) in between versioned releases.
Being able to cleanup past .devN junk helps PyPI cut down on the storage requirements and keeps release history neatly
organized.
## WARNING
THIS UTILITY IS DESTRUCTIVE AND CAN POTENTIALLY WRECK YOUR PROJECT RELEASES AND MAKE THE PROJECT INACCESSIBLE ON PYPI.
This utility is provided on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY,
or FITNESS FOR A PARTICULAR PURPOSE.
## Details
The default package release version selection pattern is `r".*dev\d+$"`.
Authentication password may be passed via environment variable
`PYPI_CLEANUP_PASSWORD`. Otherwise, you will be prompted to enter it.
Authentication with TOTP is supported.
Examples:
```bash
$ pypi-cleanup --help
usage: pypi-cleanup [-h] -u USERNAME -p PACKAGE [-t URL] [-r PATTERNS] [--do-it] [-y] [-v]
PyPi Package Cleanup Utility
optional arguments:
-h, --help show this help message and exit
-u USERNAME, --username USERNAME
authentication username (default: None)
-p PACKAGE, --package PACKAGE
PyPI package name (default: None)
-t URL, --host URL PyPI <proto>://<host> prefix (default: https://pypi.org/)
-r PATTERNS, --version-regex PATTERNS
regex to use to match package versions to be deleted (default: None)
--do-it actually perform the destructive delete (default: False)
-y, --yes confirm extremely dangerous destructive delete (default: False)
-v, --verbose be verbose (default: 0)
```
```bash
$ pypi-cleanup -u arcivanov -p pybuilder
Password:
Authentication code: 123456
INFO:root:Deleting pybuilder version 0.12.3.dev20200421010849
INFO:root:Deleted pybuilder version 0.12.3.dev20200421010849
INFO:root:Deleting pybuilder version 0.12.3.dev20200421010857
INFO:root:Deleted pybuilder version 0.12.3.dev20200421010857
```
```bash
$ pypi-cleanup -u arcivanov -p geventmp -n -r '.*\\.dev1$'
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
```
Raw data
{
"_id": null,
"home_page": "https://github.com/arcivanov/pypi-cleanup",
"name": "pypi-cleanup",
"maintainer": "Arcadiy Ivanov",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "arcadiy@ivanov.biz",
"keywords": "PyPI cleanup build dev tool release version",
"author": "Arcadiy Ivanov",
"author_email": "arcadiy@ivanov.biz",
"download_url": "https://files.pythonhosted.org/packages/0f/bb/6ff68b871296c6cc36f4d74fe35b0c9fd02f9fb13e43d1c9375adea026c8/pypi-cleanup-0.1.5.tar.gz",
"platform": null,
"description": "# PyPI Bulk Release Version Cleanup Utility\n\n[![PyPI Cleanup Version](https://img.shields.io/pypi/v/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)\n[![PyPI Cleanup Python Versions](https://img.shields.io/pypi/pyversions/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/arcivanov/pypi-cleanup/pypi-cleanup.yml?branch=master)](https://github.com/arcivanov/pypi-cleanup/actions/workflows/pypi-cleanup.yml)\n[![PyPI Cleanup Downloads Per Day](https://img.shields.io/pypi/dd/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)\n[![PyPI Cleanup Downloads Per Week](https://img.shields.io/pypi/dw/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)\n[![PyPI Cleanup Downloads Per Month](https://img.shields.io/pypi/dm/pypi-cleanup?logo=pypi)](https://pypi.org/project/pypi-cleanup/)\n\n## Overview\n\nPyPI Bulk Release Version Cleanup Utility (`pypi-cleanup`) is designed to bulk-delete releases from PyPI that match\nspecified patterns.\nThis utility is most useful when CI/CD method produces a swarm of temporary\n[.devN pre-releases](https://www.python.org/dev/peps/pep-0440/#developmental-releases) in between versioned releases.\n\nBeing able to cleanup past .devN junk helps PyPI cut down on the storage requirements and keeps release history neatly\norganized.\n\n## WARNING\n\nTHIS UTILITY IS DESTRUCTIVE AND CAN POTENTIALLY WRECK YOUR PROJECT RELEASES AND MAKE THE PROJECT INACCESSIBLE ON PYPI.\n\nThis utility is provided on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\nimplied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY,\nor FITNESS FOR A PARTICULAR PURPOSE.\n\n## Details\n\nThe default package release version selection pattern is `r\".*dev\\d+$\"`.\n\nAuthentication password may be passed via environment variable\n`PYPI_CLEANUP_PASSWORD`. Otherwise, you will be prompted to enter it.\n\nAuthentication with TOTP is supported.\n\nExamples:\n\n```bash\n$ pypi-cleanup --help\nusage: pypi-cleanup [-h] -u USERNAME -p PACKAGE [-t URL] [-r PATTERNS] [--do-it] [-y] [-v]\n\nPyPi Package Cleanup Utility\n\noptional arguments:\n -h, --help show this help message and exit\n -u USERNAME, --username USERNAME\n authentication username (default: None)\n -p PACKAGE, --package PACKAGE\n PyPI package name (default: None)\n -t URL, --host URL PyPI <proto>://<host> prefix (default: https://pypi.org/)\n -r PATTERNS, --version-regex PATTERNS\n regex to use to match package versions to be deleted (default: None)\n --do-it actually perform the destructive delete (default: False)\n -y, --yes confirm extremely dangerous destructive delete (default: False)\n -v, --verbose be verbose (default: 0)\n```\n\n```bash\n$ pypi-cleanup -u arcivanov -p pybuilder\nPassword: \nAuthentication code: 123456\nINFO:root:Deleting pybuilder version 0.12.3.dev20200421010849\nINFO:root:Deleted pybuilder version 0.12.3.dev20200421010849\nINFO:root:Deleting pybuilder version 0.12.3.dev20200421010857\nINFO:root:Deleted pybuilder version 0.12.3.dev20200421010857\n```\n\n```bash\n$ pypi-cleanup -u arcivanov -p geventmp -n -r '.*\\\\.dev1$'\nPassword:\nWARNING:root:RUNNING IN DRY-RUN MODE\nINFO:root:Will use the following patterns [re.compile('.*\\\\.dev1$')] on package geventmp\nAuthentication code: 123456\nINFO:root:Deleting geventmp version 0.0.1.dev1\n```\n",
"bugtrack_url": null,
"license": "Apache License, Version 2.0",
"summary": "PyPI Bulk Release Version Cleanup Utility",
"version": "0.1.5",
"project_urls": {
"Bug Tracker": "https://github.com/arcivanov/pypi-cleanup/issues",
"Documentation": "https://github.com/arcivanov/pypi-cleanup",
"Homepage": "https://github.com/arcivanov/pypi-cleanup",
"Source Code": "https://github.com/arcivanov/pypi-cleanup"
},
"split_keywords": [
"pypi",
"cleanup",
"build",
"dev",
"tool",
"release",
"version"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5b8aa577b2a0d8d62cb43c869a569556c6608aaf4fa3b121733cbdcb240065b8",
"md5": "3490b1845ee8c108effc4368d09c83ab",
"sha256": "2f713b009334204064668eea00840ee07519a7d7e085e88614753fd9ad5d4bd4"
},
"downloads": -1,
"filename": "pypi_cleanup-0.1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3490b1845ee8c108effc4368d09c83ab",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 7362,
"upload_time": "2024-02-27T23:13:50",
"upload_time_iso_8601": "2024-02-27T23:13:50.806615Z",
"url": "https://files.pythonhosted.org/packages/5b/8a/a577b2a0d8d62cb43c869a569556c6608aaf4fa3b121733cbdcb240065b8/pypi_cleanup-0.1.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0fbb6ff68b871296c6cc36f4d74fe35b0c9fd02f9fb13e43d1c9375adea026c8",
"md5": "a2c8332fa199e31375c53e6aee8b3036",
"sha256": "1e8df83e53c295f5501cbecb02ea06b6fb5b2f4ac8213be9f8fcfd3eb8739577"
},
"downloads": -1,
"filename": "pypi-cleanup-0.1.5.tar.gz",
"has_sig": false,
"md5_digest": "a2c8332fa199e31375c53e6aee8b3036",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 7124,
"upload_time": "2024-02-27T23:13:52",
"upload_time_iso_8601": "2024-02-27T23:13:52.563815Z",
"url": "https://files.pythonhosted.org/packages/0f/bb/6ff68b871296c6cc36f4d74fe35b0c9fd02f9fb13e43d1c9375adea026c8/pypi-cleanup-0.1.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-27 23:13:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "arcivanov",
"github_project": "pypi-cleanup",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pypi-cleanup"
}