Skip to main content

uvenv: pipx for uv (🦀)

Project description

uvenv: pipx for uv

pypi wheels snapcraft

Inspired by:

Installation

New: uvenv is now also installable via the snap store.
The pip method is still recommended, but if you want to use snap, please check out docs/snap.md!

  1. Install via pip (or alternatives):
    pip install uvenv  
    # or `uv install uvenv`, `pipx install uvenv`
    

Note: On some systems (e.g., Ubuntu 24.04+), global installation via pip is restricted by default. The recommended way to install uvenv for these systems is to use the install.sh script:

$SHELL -c "$(curl -fsSL https://raw.githubusercontent.com/robinvandernoord/uvenv/uvenv/install.sh)"
# instead of `$SHELL`, you can also use `sh`, `bash`, `zsh`
> ```
For more installation alternatives, see [docs/installation.md](docs/installation.md) if you encounter `externally-managed-environment` errors.
  1. Optional (for bash users):

    uvenv setup
    

    This installs the following features:

  • Ensures ~/.local/bin/ is added to your PATH, so commands can be found (unless --skip-ensurepath). Can also be activated via uvenv ensurepath
  • Enables tab completion for uvenv (unless --skip-completions). Can also be enabled via uvenv completions --install.
  • Enables uvenv activate (unless --skip-activate) to activate uvenv-managed virtualenvs from your shell

Usage

uvenv

Most pipx commands are supported, such as install, upgrade inject, run, runpip.
Run uvenv without any arguments to see all possible subcommands.

🆕 Freeze and Thaw

You can snapshot your current setup into a uvenv.lock file using:

uvenv freeze

This lock file records all installed applications along with their metadata — including version, Python version, and any injected dependencies.

Later, you can restore that exact setup using:

uvenv thaw

This is useful for replicating the same setup on a different machine, or after a clean install or system update.

Lock file formats

The uvenv.lock file can be saved in one of the following formats:

  • TOML (default): human-readable and easy to edit
  • JSON: more verbose, but script-friendly (e.g. with jq)
  • Binary: compact, but not human-readable

Choose the format using the --format flag:

uvenv freeze --format json

Selective freeze/thaw

Use --include or --exclude to control which apps get recorded or restored:

uvenv freeze --exclude some-app
uvenv thaw --include only-this-app

For all available options, see:

uvenv freeze --help
uvenv thaw --help

Migrating from uvx and Comparing with uv tool

Migrating from uvx

The tool previously named uvx is now uvenv due to a naming collision with a new uv command. The new name better reflects its purpose, combining uv with venv. You can run uvenv self migrate to move your environments and installed commands from uvx to uvenv.


How uvenv differs from uv tool

While both uvenv and uv tool (a subcommand of uv) offer overlapping functionality for installing and running Python applications, they differ in purpose and approach:

  • Interface: uvenv is modeled after pipx, offering commands like install, inject, run, upgrade, and runpip. If you're already used to pipx, uvenv is a near drop-in replacement.
  • Inject support: uvenv supports pipx's inject functionality, which lets you add extra packages to an app’s environment — helpful for plugins, linters, or testing tools. uv tool does not currently support this.
  • Compatibility: uvenv uses uv for dependency resolution and installation, benefiting from its speed and correctness. It also respects uv's configuration files (such as ~/.config/uv/uv.toml and /etc/uv/uv.toml, see uv config docs) unless the environment variable UV_NO_CONFIG=1 is set to ignore them.

In short:

  • Use uvenv if you want pipx-style workflows with advanced management features.
  • Use uv tool if you prefer a minimal approach for running tools quickly - for most basic use-cases, uv tool is probably sufficient.

Platform Considerations

  • Rust-Powered Performance (uvenv 2.0): Starting from version 2.0, uvenv leverages Rust for improved performance and compatibility with uv.
  • Prebuilt Binaries: Currently, prebuilt binaries are available for x86_64 (amd64) and aarch64 (ARM64) on Linux, as well as Intel (x86_64) and Apple Silicon (ARM64) on macOS.
  • Other Platforms: If you're on a different platform, you can still use uvx 1.x, which is written in pure Python. Find it at robinvandernoord/uvx.
  • Alternatively, you can Compile for Your Platform:
    • Install the Rust toolchain:
      curl https://sh.rustup.rs -sSf | sh
      
    • Clone the uvenv repo and navigate to it:
      git clone https://github.com/robinvandernoord/uvenv.git
      cd uvenv
      
    • Set up a virtual environment (choose Python or uv):
      python -m venv venv  # or `uv venv venv --seed`
      source venv/bin/activate
      
    • Install Maturin (Python with Rust package builder):
      pip install maturin  # or `uv pip install maturin`
      
    • Compile and install the uvenv binary:
      maturin develop
      
    • Now you can use uvenv:
      ./venv/bin/uvenv
      

For additional details on building and distribution, refer to maturin documentation.

License

uvenv is distributed under the terms of the MIT license.

Changelog

See CHANGELOG.md on GitHub

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

uvenv-3.9.10.tar.gz (96.9 kB view details)

Uploaded Source

Built Distributions

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

uvenv-3.9.10-py3-none-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

uvenv-3.9.10-py3-none-musllinux_1_2_aarch64.whl (4.3 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

uvenv-3.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.6 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

uvenv-3.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.3 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

uvenv-3.9.10-py3-none-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

uvenv-3.9.10-py3-none-macosx_10_12_x86_64.whl (4.4 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file uvenv-3.9.10.tar.gz.

File metadata

  • Download URL: uvenv-3.9.10.tar.gz
  • Upload date:
  • Size: 96.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.8.7

File hashes

Hashes for uvenv-3.9.10.tar.gz
Algorithm Hash digest
SHA256 444103ebc4045763f2c4ed689052ea2c7834c96b114869ac68bb7e42bd09c626
MD5 6cf5102c146f5a2fa832a5b18b5f7899
BLAKE2b-256 0ded73ec0a225bc7534c6586720c367677d7b6f90a1e1d6fb440d19163fec06d

See more details on using hashes here.

File details

Details for the file uvenv-3.9.10-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for uvenv-3.9.10-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ebf94bbc6e12780ed40a1bfbf845131e99514ef1bae5322fa94a9d774a62c272
MD5 8c25796b14d4396dbeba57af866b15b3
BLAKE2b-256 2a8b8d72ed25a9d02c599fe1253cbad9a92e36a7008b3b2547a4bb00aaa195a1

See more details on using hashes here.

File details

Details for the file uvenv-3.9.10-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for uvenv-3.9.10-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 962e5b1558fe6084d79970cb340073c645b5079806ebd9e274b5250224c42879
MD5 b4e984c775eaa0cdb476ae7db59b58ca
BLAKE2b-256 8171131d3c5efc69e3f1447248bab86abe90c7b4e6440adc75fe3c9569dc26d5

See more details on using hashes here.

File details

Details for the file uvenv-3.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for uvenv-3.9.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7f2a8961b94233b39497c9f6d6f36df35bc420174e474b7d23cb60f017c6836e
MD5 7345d762b87d765b550c5bf7c824a1b2
BLAKE2b-256 1b45b3d09271b2d964fe87667b6ccbc4bf24463450914f1ec1aed268eb82e101

See more details on using hashes here.

File details

Details for the file uvenv-3.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for uvenv-3.9.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 58eb77862c070ad3ab4477752e85a778e4bbb5a17600c673fdc1791a1b14dc70
MD5 c45dab2db1806741ff5d130dc269518a
BLAKE2b-256 6cb83a547e01d49b56b356fb5da847714b7eadf3721fcb2215c0d1f6767ac2e1

See more details on using hashes here.

File details

Details for the file uvenv-3.9.10-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for uvenv-3.9.10-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8fe159fbc80645c427881db1460bba201141777b10eb46653b084bfff84e6eeb
MD5 9f9ed668b905e5223f27e93a96651e53
BLAKE2b-256 e06229700f498a9893e1ae09d465b8a19c1a30c5dfdd2c83e8de2182ae56e80e

See more details on using hashes here.

File details

Details for the file uvenv-3.9.10-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for uvenv-3.9.10-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f848021f12e4f99f800a900dda48f7b3d60bf474bd7720e596ca4c890ebd5141
MD5 7f7e33555dd52d1759c570092de62486
BLAKE2b-256 f3af8ad7d1b3aa47aa1a03289ce7c773a913a37daa4b533327e5acf8590e5e52

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