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.

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.0.tar.gz (219.4 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.0-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: uvu-0.1.0.tar.gz
  • Upload date:
  • Size: 219.4 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.0.tar.gz
Algorithm Hash digest
SHA256 24c152c91be799b110e710cbf7071b528bac7bf0255cc0c236ea8847d52429d0
MD5 26cec41dcb98b9073ca8f72ec1d87004
BLAKE2b-256 f96f14a2a0d41034c160ad70b9cb72c249cf6279636a7ec79b5eaac0f6d43c98

See more details on using hashes here.

File details

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

File metadata

  • Download URL: uvu-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.9 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 13cbcb848968c86d5b40055c176416eb458820fc98672bbdc037a900dbd6849b
MD5 057d97024187109395dab3fa49c33c99
BLAKE2b-256 079a3cac9961f957f460dcbf45b1504eef6a611323a4cd72f2882de664bd81e1

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