Skip to main content

uvu logo

uvu

PyPI version Python versions License Ruff

A clean standalone Python utility and library to check and update uv-managed project dependencies with optional target pinning back to your pyproject.toml. View on PyPI.

uvu CLI demo: check updates and pin packages

Features

  • Workspace Support: Resolves standalone projects or complex uv workspaces interactively or via CLI flags.
  • Direct vs Transitive Identification: Inspects which dependencies are direct in your packages and which are transitive.
  • Pyproject Pinning: Automatically updates version constraints in pyproject.toml files to match the new uv.lock values.
  • Safe TOML Handling: Error-resilient TOML reader with useful CLI messaging.
  • Modern Integration: Integrates directly with the uv toolchain (uv lock, uv sync).

Installation

Install via pip or run directly using uv:

pip install uvu

Or run on-the-fly:

uvx uvu check

CLI Usage

You can use the short command uvu or the full command update-uv-packages.

Check available updates

Check for updates across the project:

uvu check

Example output:

Project: /path/to/project
Locked packages: 8 (3 direct in scope, 5 transitive)
Available compatible updates (4)
  #  package    locked    latest    role
---  ---------  --------  --------  -------------------------
  1  click      8.0.1     8.4.2     direct (demo-app/project)
  2  idna       2.10      3.18      transitive
  3  requests   2.25.1    2.27.1    direct (demo-app/project)
  4  urllib3    1.26.15   1.26.20   direct (demo-app/project)

Outdated packages blocked by constraints (1)
  #  package    locked    latest    role        blocked by
---  ---------  --------  --------  ----------  --------------------
  1  chardet    4.0.0     7.4.3     transitive  required by requests

Check for updates and also list packages that are already up to date:

uvu check --verbose

Example output:

Project: /path/to/project
Locked packages: 8 (3 direct in scope, 5 transitive)
Available compatible updates (4)
  #  package    locked    latest    role
---  ---------  --------  --------  -------------------------
  1  click      8.0.1     8.4.2     direct (demo-app/project)
  2  idna       2.10      3.18      transitive
  3  requests   2.25.1    2.27.1    direct (demo-app/project)
  4  urllib3    1.26.15   1.26.20   direct (demo-app/project)

Outdated packages blocked by constraints (1)
  #  package    locked    latest    role        blocked by
---  ---------  --------  --------  ----------  --------------------
  1  chardet    4.0.0     7.4.3     transitive  required by requests

Up to date (3)
  certifi==2026.6.17 (transitive)
  colorama==0.4.6 (transitive)
  demo-app==0.1.0 (transitive)

Apply updates

Apply updates to specific packages or all packages:

# Update all available packages
uvu update --all

# Update specific packages
uvu update --packages requests urllib3

# Update and pin modified dependency versions back to pyproject.toml
uvu update --packages urllib3 click --pin-updated

Example output for uvu update --packages urllib3 click --pin-updated:

Project: /path/to/project
Locked packages: 8 (3 direct in scope, 5 transitive)
Available compatible updates (4)
  #  package    locked    latest    role
---  ---------  --------  --------  -------------------------
  1  click      8.0.1     8.4.2     direct (demo-app/project)
  2  idna       2.10      3.18      transitive
  3  requests   2.25.1    2.27.1    direct (demo-app/project)
  4  urllib3    1.26.15   1.26.20   direct (demo-app/project)

Outdated packages blocked by constraints (1)
  #  package    locked    latest    role        blocked by
---  ---------  --------  --------  ----------  --------------------
  1  chardet    4.0.0     7.4.3     transitive  required by requests

Update report
=============
package    before    after
---------  --------  -------
click      8.0.1     8.4.2
urllib3    1.26.15   1.26.20

pyproject.toml pins
member    group    package    requirement
--------  -------  ---------  ----------------
demo-app  project  urllib3    urllib3==1.26.20
demo-app  project  click      click==8.4.2

Programmatic API Usage

You can import and orchestrate updates directly inside other Python scripts:

from pathlib import Path
from uvu import UVDependencyManager

# Initialize the manager pointing to your project
manager = UVDependencyManager(start_dir=Path("/path/to/project"))

# Bootstrap layout and workspace members
# (Pass an empty Namespace or CLI args to control options)
import argparse
args = argparse.Namespace(all_members=True, yes=True)
manager.bootstrap(args=args)

# Discover updates
updates = manager.discover_updates()
for update in updates:
    print(f"{update.name}: {update.current} -> {update.latest}")

Download files

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

Source Distribution

uvu-0.2.1.tar.gz (3.8 MB view details)

Uploaded Source

Built Distribution

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

uvu-0.2.1-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

Details for the file uvu-0.2.1.tar.gz.

File metadata

  • Download URL: uvu-0.2.1.tar.gz
  • Upload date:
  • Size: 3.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for uvu-0.2.1.tar.gz
Algorithm Hash digest
SHA256 ef1613e01bfd64aa0675080d53eae9adaaa5c7ab22196b9ddceecf429bf3356a
MD5 089e1563d54947c1a20c89a347006a38
BLAKE2b-256 3e9d41ab521c170c923a4843003f14dfaa6a2f07a5ab07186303176756ad13b7

See more details on using hashes here.

File details

Details for the file uvu-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: uvu-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 30.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for uvu-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 862eb6ca6f2c92eafd948d176c9bfe5cb0b82273869e6fd3bc0fb5bddf2103b5
MD5 a601a1bb9ab10ee6984fc55d22ef75dd
BLAKE2b-256 ef8e0d0d36a443581df23e7461ad48ff2576f291e1d43c6e931f63ada31cd28c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

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