Skip to main content

python-update-checker

Python-update-checker (puc) checks or updates pinned dependencies in pyproject.toml, requirements.txt or uv.lock files.

If you are developing an application you should pin all dependencies. When developing a library, only development dependencies should be pinned. Since puc updates pinned dependencies, it is mostly suitable when developing applications.

See [https://github.com/astral-sh/uv/issues/6794] for a discussion about different pinning strategies.

Quickstart

# update dependencies in pyproject.toml to the latest version
uvx --from python-update-checker puc --exclude-newer="7 days" update pyproject.toml
# install updated dependencies in virtual environment
uv sync

Features

  • updates pinned dependencies, ignores unpinned dependencies
  • supports pyproject.toml, uv.lock and requirements.txt formats
  • supports [project.dependencies], [project.optional-dependencies] and [dependency-groups] in pyproject.toml
  • supports legacy dependency format [tool.uv.dev-dependencies] in pyproject.toml
  • supports recursive references (-r) in requirements.txt formats
  • can run in check only mode, ie. it checks if updates are available
  • limit updates to specific packages
  • can ignore packages
  • limit updates with package version constraints (ie. "django<6")
  • limit updates to versions that were uploaded prior to a given date
  • (limited) support for environment markers, ie. "pywin32==311; os_name=='nt'"
  • runs on Linux, MacOS and Windows platforms

Examples

$ # check all pinned packages for updates in pyproject.toml
$ puc check pyproject.toml
puc INFO: check pyproject file pyproject.toml
puc WARNING: found update 'ty==0.0.29' --> 0.0.32

$ # update all pinned packages in pyproject.toml
$ # limit updates to versions that are at least 7 days old
$ puc --exclude-newer="7 days" update pyproject.toml
puc INFO: update pyproject file pyproject.toml
puc INFO: updating 'ty==0.0.29' --> 0.0.31
puc INFO: Wrote 1 updated package version(s) to pyproject.toml
$ # update the project environment after upgrading pyproject.toml
$ uv sync

$ # check all pinned packages for updates in requirements.txt
$ puc check requirements.txt
puc INFO: check requirements file requirements.txt
puc WARNING: found update 'argcomplete==3.6.1' --> 3.6.3
puc WARNING: found update 'Django==5.2.0' --> 6.0.4

$ # update only the django package version in requirements.txt
$ # limit updates to django versions less than 6
$ puc --package="Django" --constraints="Django<6" update requirements.txt
puc INFO: update requirements file requirements.txt
puc INFO: updating 'Django==5.2.0' --> 5.2.13
puc INFO: Wrote 1 updated package version(s) to requirements.txt

Script behaviour

The exit code of puc check is non-zero when updates are available.

Checking a pyproject.toml or uv.lockfile with puc should be done from the directory of the pyproject.toml file, especially if your project relies on a project directory (for example to define additional package indexes in pyproject.toml).

After updating versions in pyproject.toml, run uv lock --upgrade to update the transitive dependencies in uv.lock and uv sync to update your virtual environment.

Pinned dependencies are packages with == or === constraints and no wildcards in the version.

Installation

  1. Install python uv
  2. Install puc with uv pip install python-update-checker or run with uvx --from python-update-checker puc ...

Architecture

Dependencies are

  • uv: The uv binary must be available for the script to call.
    puc uses echo "package" | uv pip compile - to get latest package versions.
    puc uses uv add "package==<version>" to update pyproject.toml dependencies and uv lock --upgrade-package to update uv.lock dependencies.

  • packaging: Parses dependencies with the packaging.requirements.Requirement class.

puc needs Python >= 3.11 since it uses the tomllib Python module.

Updating minimum version requirements

Dependencies like requests>=1.12 or django>5 specify a minimum version requirement.

Minimum requirements are necessary to work with different versioned dependencies, since different distributions package different versions of those dependencies. Minimum requirements change when the project uses a feature that is only available in newer versions of a dependency. This cannot be determined automatically by puc. So minimum version requirements should be updated manually.

Limitations

  • No support for custom dependency formats in pyproject.toml (eg. [tool.poetry.dependencies]).
  • puc has limited support for environment markers.
  • Constraint references (-c) inside requirements.txt are not supported.
    Use the --constraints option instead.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_update_checker-1.4.0.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_update_checker-1.4.0-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file python_update_checker-1.4.0.tar.gz.

File metadata

  • Download URL: python_update_checker-1.4.0.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for python_update_checker-1.4.0.tar.gz
Algorithm Hash digest
SHA256 fc1746348afdff0c4f1b33f56b21900c8259638fea421824d1aa91dc5f4fe69e
MD5 7c77d018ccefcc631726cf92cdacdcff
BLAKE2b-256 3919764f514595c85da851bbc8e5e7ba9084e3d9ba54033794ea92fedec315b5

See more details on using hashes here.

File details

Details for the file python_update_checker-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: python_update_checker-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.11 {"installer":{"name":"uv","version":"0.12.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for python_update_checker-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0c44630605c39c43bc338ce8dbe50257b8ad6de598b624888a8bb107b644b9f8
MD5 63c1b20741b7aaf2e2683435b0bc71c4
BLAKE2b-256 bc96cbd0d013a4dffd7743a2c9eebfe0e0782112c73151c5abc48e6b56d97891

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 files

1.3.0

2 files

1.2.0

2 files

1.1.0

2 files

1.0.0

2 files

0.12.0

2 files

0.11.0

2 files

0.10.0

2 files

0.9.0

2 files

0.8.0

2 files

0.7

2 files

0.6

2 files

0.5

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page