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.3.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.3-py3-none-any.whl (30.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: uvu-0.2.3.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.3.tar.gz
Algorithm Hash digest
SHA256 7977f635520b4f830c45f3ca4398491204556af88ebfed618d2aca308971b4b9
MD5 919a04bda311c95f8cc705469cb0fffa
BLAKE2b-256 5fb18ceb03e4e9508a84e089f29869c1e021e8d3093fdc9f48235b821fb21498

See more details on using hashes here.

File details

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

File metadata

  • Download URL: uvu-0.2.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2257a1bf6da8b6d722c75e4b2a060d3089971af3a77446ab733c166bc9ab6c86
MD5 1eccc9c5195cdbee983823150d7575b9
BLAKE2b-256 0badcd3dd905b883a839c35bc2af56f972af2438515b6bee8ad178fd15276cb4

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.5

2 files

0.2.4

2 files

This release

0.2.3 This release

2 files

0.2.2

2 files

0.2.1

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