Skip to main content

Check and update uv-managed project dependencies with optional pyproject pinning.

Project description

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.

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}")

Project details


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.1.2.tar.gz (219.6 kB view details)

Uploaded Source

Built Distribution

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

uvu-0.1.2-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: uvu-0.1.2.tar.gz
  • Upload date:
  • Size: 219.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for uvu-0.1.2.tar.gz
Algorithm Hash digest
SHA256 86052e5a2c98c24a63f92600b0adb6c052463c0b1173a87f610831ce817a90f0
MD5 4f95df8bf902bb5bda65f3535473e17c
BLAKE2b-256 7d36eb4c1c40a385944cdebe85491ae8abce66af672935c1ce80966e4e6e6849

See more details on using hashes here.

File details

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

File metadata

  • Download URL: uvu-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 30.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for uvu-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2ce1f261c074276be7822748dd900cb3e5493a6554ab3b3e8575275e61f5a5a6
MD5 f83b76497b98d0ea60e95a9754420ce9
BLAKE2b-256 432eb7f92338ff3ad725a8d6f5881f5b0b2c28da815f8d33be454aa821c76dbf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page