cupdate
Python requirements.txt updater.
Installation
pip install cupdate
Usage
Basic Update
# Update all packages in requirements.txt
cupdate
With Exclusions
Create a cupdate.config.txt file to exclude packages:
# cupdate.config.txt
numpy
pandas==1.5.0
tensorflow
Then run:
cupdate
Features
- Smart Updates - Preserves version operators (>=, <=, ==)
- In-place Rewrites - Only the version number changes, environment markers, comments and order stay
- Package Exclusions - Skip specific packages from updates
- Release Information - Shows package age and project URLs
- Formatted Output - Clean table display of updates
- PyPI Integration - Fetches latest versions and metadata
Example Output
NAME OLD NEW AGE INFO
------------ -------- -------- ---------- -------------------------
requests 2.28.1 2.31.0 2 months https://pypi.org/project/requests/
flask 2.2.2 3.0.0 3 weeks https://pypi.org/project/flask/
numpy 1.24.0 1.26.2 1 month https://pypi.org/project/numpy/
✨ requirements.txt updated with 3 packages
Configuration
Exclusion File Format
# Lines starting with # are comments
package-name
another-package>=1.0.0
specific-version==2.1.0
Version Operators
cupdate preserves your version constraints:
package==1.0.0→package==1.2.0(exact version)package>=1.0.0→package>=1.2.0(minimum version)package<=2.0.0→package<=2.1.0(maximum version)
Requirements File Support
Works with standard requirements.txt format:
# requirements.txt
requests==2.28.1
flask[async]>=2.2.0
numpy<=1.24.0
onnxruntime==1.29.0; platform_machine != "x86_64"
Only the version number of a pinned requirement is replaced. Everything around it is written back byte for byte, including environment markers, extras, inline comments, blank lines, line order and CRLF endings.
Lines that do not pin a single version are left alone and never looked up:
-r base.txt
--index-url https://example.com/simple
numpy>=2.0,<3
hailort @ https://example.com/hailort-4.21.0.whl ; platform_machine == "aarch64"
pandas
Command Line Interface
# Update requirements in current directory
cupdate
# The tool automatically looks for:
# - requirements.txt (required)
# - cupdate.config.txt (optional exclusions)
Error Handling
- Missing requirements.txt - Shows error and exits
- Network issues - Shows warnings, continues with available data
- Invalid packages - Skips problematic packages with warnings
- Missing exclusions - Continues normally, updates all packages
Integration Examples
CI/CD Pipeline
# .github/workflows/update-deps.yml
name: Update Dependencies
on:
schedule:
- cron: '0 0 * * 1' # Weekly on Monday
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install cupdate
run: pip install cupdate
- name: Update requirements
run: cupdate
- name: Create PR
# ... create pull request with changes
Development Workflow
# 1. Install cupdate
pip install cupdate
# 2. Create exclusions (optional)
echo "tensorflow" > cupdate.config.txt
# 3. Update dependencies
cupdate
# 4. Install updated packages
pip install -r requirements.txt
# 5. Test your application
python -m pytest
Package Information
The tool provides rich information about updates:
- Package Name - The package being updated
- Old Version - Current version in requirements.txt
- New Version - Latest available version
- Age - How long ago the new version was released
- Info URL - Link to package homepage or PyPI page
Contributing
Contributions are welcome! Please read our contributing guidelines and submit pull requests to our repository.
License
MIT
Metadata
Release files for cupdate 2.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cupdate-2.0.3.tar.gz | 8.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cupdate-2.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.4 kB
Release files / cupdate-2.0.3.tar.gz
| Download URL | cupdate-2.0.3.tar.gz |
|---|---|
| Size | 8.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
70a6d66f429c309391d936bb70fb6e5b5478faf654cdf3be7050d23276be43ab
|
|
BLAKE2b-256 checksum How to use checksums |
c87b730993f8139bc17917f1b027611c20ece12898c674cb064304430c6b726a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency logRelease files / cupdate-2.0.3-py3-none-any.whl
| Download URL | cupdate-2.0.3-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9300956a178fe52c3bc661be81ddd1009e038322d4a9af068697882331e788fb
|
|
BLAKE2b-256 checksum How to use checksums |
98ec5f00cbaf566ba6ad2c5b34626fe96030d2a1f789b87ef1538309aa6363b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.
Transparency log