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

Uploaded Python 3

File details

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

File metadata

  • Download URL: uvu-0.2.5.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.5.tar.gz
Algorithm Hash digest
SHA256 020d87bc48828665d524db5add244bb1eb1a64abad41ad63558c898a13fdf19c
MD5 95aeb1051f518470ca1f849505dffe2c
BLAKE2b-256 9aa1ddb7e8431528a525c5530b5c77e65b3d6ed35ba7b88532b6f55e35574e2b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: uvu-0.2.5-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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b8b338bb4c87239f7280e21038c5b9463939b7995ca347a41411b7320a86bc0c
MD5 7767c281c67ea66002ece9a51a55f4b5
BLAKE2b-256 a845a365c1d439aa53e3b92ea97250d1ee4fc80f051135a39d553f7b9b8d5928

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.5 This release

2 files

0.2.4

2 files

0.2.3

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