{"id":17527012,"url":"https://github.com/robinvandernoord/uvenv","last_synced_at":"2025-07-13T15:32:29.133Z","repository":{"id":233921098,"uuid":"785305164","full_name":"robinvandernoord/uvenv","owner":"robinvandernoord","description":"uvenv: pipx for uv (🦀)","archived":false,"fork":false,"pushed_at":"2024-10-18T18:03:08.000Z","size":1267,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"uvenv","last_synced_at":"2024-10-19T22:23:52.003Z","etag":null,"topics":["pip","pipx","python","rust","uv","uvenv","uvx"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/uvenv","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robinvandernoord.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-11T16:06:15.000Z","updated_at":"2024-10-18T18:03:13.000Z","dependencies_parsed_at":"2024-05-15T13:24:11.560Z","dependency_job_id":"aa1139b0-6d27-4511-a72c-b19657bb1195","html_url":"https://github.com/robinvandernoord/uvenv","commit_stats":null,"previous_names":["robinvandernoord/uvx2","robinvandernoord/uvenv"],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinvandernoord%2Fuvenv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinvandernoord%2Fuvenv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinvandernoord%2Fuvenv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robinvandernoord%2Fuvenv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robinvandernoord","download_url":"https://codeload.github.com/robinvandernoord/uvenv/tar.gz/refs/heads/uvenv","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225893661,"owners_count":17540919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pip","pipx","python","rust","uv","uvenv","uvx"],"created_at":"2024-10-20T15:02:56.925Z","updated_at":"2025-07-13T15:32:29.125Z","avatar_url":"https://github.com/robinvandernoord.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# uvenv: pipx for uv\n\n![pypi wheels](https://github.com/robinvandernoord/uvenv/actions/workflows/pypi.yml/badge.svg)\n![snapcraft](https://github.com/robinvandernoord/uvenv/actions/workflows/snap.yml/badge.svg)\n\n\nInspired by:\n\n- [pipx](https://github.com/pypa/pipx)\n- [uv](https://github.com/astral-sh/uv)\n\n## Installation\n\n\u003e **New**: `uvenv` is now also installable via the snap store.  \n\u003e The `pip` method is still recommended, but if you want to use `snap`, please check out [docs/snap.md](./docs/snap.md)!\n\n1. Install via pip (or alternatives):\n    ```bash\n    pip install uvenv  \n   # or `uv install uvenv`, `pipx install uvenv`\n    ```\n\n\u003e Note: On some systems (e.g., Ubuntu 24.04+), global installation via pip is restricted by default.\n\u003e The recommended way to install `uvenv` for these systems is to use the [`install.sh`](https://github.com/robinvandernoord/uvenv/blob/uvenv/install.sh) script:\n\u003e ```bash\n\u003e $SHELL -c \"$(curl -fsSL https://raw.githubusercontent.com/robinvandernoord/uvenv/uvenv/install.sh)\"\n\u003e # instead of `$SHELL`, you can also use `sh`, `bash`, `zsh`\n\u003e \u003e ```\n\u003e For more installation alternatives, see [docs/installation.md](docs/installation.md) if you encounter `externally-managed-environment` errors.\n\n2. Optional (for bash users):\n      ```bash\n      uvenv setup\n      ```\n\n   This installs the following features:\n\n- Ensures `~/.local/bin/` is added to your PATH, so commands can be found (unless `--skip-ensurepath`). Can also be\n  activated via `uvenv ensurepath`\n- Enables tab completion for `uvenv` (unless `--skip-completions`). Can also be enabled\n  via `uvenv completions --install`.\n- Enables `uvenv activate` (unless `--skip-activate`) to activate uvenv-managed virtualenvs from your shell\n\n## Usage\n\n```bash\nuvenv\n```\n\nMost `pipx` commands are supported, such as `install`, `upgrade` `inject`, `run`, `runpip`.  \nRun `uvenv` without any arguments to see all possible subcommands.\n\n### 🆕 Freeze and Thaw\n\nYou can snapshot your current setup into a `uvenv.lock` file using:\n\n```bash\nuvenv freeze\n```\n\nThis lock file records all installed applications along with their metadata — including version, Python version, and any injected dependencies.\n\nLater, you can restore that exact setup using:\n\n```bash\nuvenv thaw\n```\n\nThis is useful for replicating the same setup on a different machine, or after a clean install or system update.\n\n#### Lock file formats\n\nThe `uvenv.lock` file can be saved in one of the following formats:\n\n- **TOML** (default): human-readable and easy to edit\n- **JSON**: more verbose, but script-friendly (e.g. with `jq`)\n- **Binary**: compact, but not human-readable\n\nChoose the format using the `--format` flag:\n\n```bash\nuvenv freeze --format json\n```\n\n#### Selective freeze/thaw\n\nUse `--include` or `--exclude` to control which apps get recorded or restored:\n\n```bash\nuvenv freeze --exclude some-app\nuvenv thaw --include only-this-app\n```\n\nFor all available options, see:\n\n```bash\nuvenv freeze --help\nuvenv thaw --help\n```\n\n## Migrating from `uvx` and Comparing with `uv tool`\n\n### Migrating from `uvx`\n\nThe 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`.\nYou can run `uvenv self migrate` to move your environments and installed commands from `uvx` to `uvenv`.\n\n---\n\n### How `uvenv` differs from `uv tool`\n\nWhile both `uvenv` and `uv tool` (a subcommand of [`uv`](https://github.com/astral-sh/uv)) offer overlapping functionality for installing and running Python applications, they differ in purpose and approach:\n\n* **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.\n* **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.\n* **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](https://docs.astral.sh/uv/configuration/files/)) unless the environment variable `UV_NO_CONFIG=1` is set to ignore them.\n\nIn short:\n\n* Use **`uvenv`** if you want `pipx`-style workflows with advanced management features.\n* Use **`uv tool`** if you prefer a minimal approach for running tools quickly - for most basic use-cases, `uv tool` is probably sufficient.\n\n\n## Platform Considerations\n\n- **Rust-Powered Performance (uvenv 2.0):** Starting from version 2.0, `uvenv` leverages Rust for improved performance\n  and compatibility with `uv`.\n- **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.\n- **Other Platforms:** If you're on a different platform, you can still use `uvx 1.x`, which is written in pure\n  Python.\n  Find it at [robinvandernoord/uvx](https://github.com/robinvandernoord/uvx).\n- Alternatively, you can **Compile for Your Platform**:\n    - Install the Rust toolchain:\n        ```bash\n        curl https://sh.rustup.rs -sSf | sh\n        ```\n    - Clone the `uvenv` repo and navigate to it:\n        ```bash\n        git clone https://github.com/robinvandernoord/uvenv.git\n        cd uvenv\n        ```\n    - Set up a virtual environment (choose Python or uv):\n        ```bash\n        python -m venv venv  # or `uv venv venv --seed`\n        source venv/bin/activate\n        ```\n    - Install Maturin (Python with Rust package builder):\n        ```bash\n        pip install maturin  # or `uv pip install maturin`\n        ```\n    - Compile and install the `uvenv` binary:\n        ```bash\n        maturin develop\n        ```\n    - Now you can use `uvenv`:\n        ```bash\n        ./venv/bin/uvenv\n        ```\n\nFor additional details on building and distribution, refer to [maturin](https://www.maturin.rs/distribution)\ndocumentation.\n\n\n## License\n\n`uvenv` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.\n\n## Changelog\n\n\nSee `CHANGELOG.md` [on GitHub](https://github.com/robinvandernoord/uvenv/blob/master/CHANGELOG.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinvandernoord%2Fuvenv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobinvandernoord%2Fuvenv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobinvandernoord%2Fuvenv/lists"}