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.20.tar.gz (98.1 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.20-py3-none-musllinux_1_2_x86_64.whl (4.6 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

uvenv-3.9.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

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

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

uvenv-3.9.20-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.20.tar.gz.

File metadata

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

File hashes

Hashes for uvenv-3.9.20.tar.gz
Algorithm Hash digest
SHA256 6fa59d3313e3bc6fb4db5fc7a749d6b1723bb8f7a30d9fa3d007cc7d95fb27c5
MD5 ffa004ce2ec173ca1228683163d5df74
BLAKE2b-256 047fcd92ebbdfdac79a64f59f7b7fee53525999b772b6ca3facef9c50b374fad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uvenv-3.9.20-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 19d585c5834beb0d4d187ec28a93cb10e652fa26d48bc91cf17481d4cfdebd82
MD5 19ea976dda085e79ab9389111a63ce7c
BLAKE2b-256 2d1ec3ecec27e0f4df4038852e7ef201f78c6379ea5d675b76661c291d09a374

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uvenv-3.9.20-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 669da6d97c9c7e58ad3b00f70ad8c78486a48ddbe63c45d9e80b75c9474ae5df
MD5 8b2b2a4c14943dabffe55d5c8ad48e18
BLAKE2b-256 6d1b3872f83ddecb7dadb57b840ae3c268444de1ed62b0ef2b96ae1fd7c1152e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uvenv-3.9.20-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 212b9c2a39838552911cfa0fb781d966e3938cf2d451d03305c8b16f23c650b0
MD5 03ddb918326b4cdac6cc59f6dbc0e12b
BLAKE2b-256 a9788cebb7cf5e4c6c4c816314c63fb51282eba8ec365ff0b2eee7b348e32d7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uvenv-3.9.20-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e1863daa2cbd2cf4f9e97d1d34b7b93c63d3bedaeeaa91fd59365962ead31674
MD5 119f92d88ad5c1360c792d63c8809378
BLAKE2b-256 a99bfef6fba6a6e5318a38186e56c9c533a3c36dfde39b6d4c6d76a9842c414d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uvenv-3.9.20-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b08da03e9e36fd97bd8fbc16500732e3a35419da3aef0bb3176b61de242aa813
MD5 e09b66e6b4944f85ae95fa52a0b7a693
BLAKE2b-256 a4b52aaf15fc1bceb4741c56b48bc766e3ccff5c0f7bb0df8cb20e714c39bb8e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for uvenv-3.9.20-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 fcc865094b682811fce8789965878d2ce9848663ad4c3a2df08ab7a8f3597aa8
MD5 a81967bd0fb15fd634e4dd8b6f695436
BLAKE2b-256 55a129c78bfdb8d06be4c8302088ddd809045f21f930ec2412e654620322fe5c

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