# uv 0.3: One command line to rule them all (almost)

Yesterday, [Charlie Marsh](https://x.com/charliermarsh) and his team at [Astral](https://astral.sh) released [uv 0.3.0](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md#030).

For those who may have missed it, [uv was released earlier this year](https://pydevtools.com/blog/uv-got-to-keep-up-a-new-installer-announced/) primarily as a blazing-fast replacement for [pip](https://packaging.python.org/en/latest/tutorials/packaging-projects/) for installing Python packages.

This new release provides [new documentation](https://docs.astral.sh/uv/) and a host of new functionality.

[Charlie Marsh](https://astral.sh/blog/uv-unified-python-packaging) and [Simon Willison](https://simonwillison.net/2024/Aug/20/uv-unified-python-packaging/) have written helpful posts about the new functionality.

I thought it'd be helpful to illustrate how the current uv functionality compares to existing tools:

| uv Command                                                                       | Alternative to                                                                                                                     |
| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| [uv pip](https://docs.astral.sh/uv/getting-started/features/#the-pip-interface)  | [pip](https://pydevtools.com/handbook/reference/pip.md) and [pip-tools](https://pydevtools.com/handbook/reference/pip-tools.md) |
| [uv venv](https://docs.astral.sh/uv/getting-started/features/#the-pip-interface) | [venv](https://pydevtools.com/handbook/reference/venv.md) and [virtualenv](https://pydevtools.com/handbook/reference/virtualenv.md)         |
| [uv tool](https://docs.astral.sh/uv/guides/tools/)                               | [pipx](https://pydevtools.com/handbook/reference/pipx.md)                                                                                               |
| [uv init](https://docs.astral.sh/uv/guides/projects/)                            | [Poetry](https://pydevtools.com/handbook/reference/poetry.md)/[PDM](https://pydevtools.com/handbook/reference/pdm.md) (partially)                                          |
| [uv python](https://docs.astral.sh/uv/guides/install-python/)                    | [pyenv](https://pydevtools.com/handbook/reference/pyenv.md)                                                                                            |
| [uv run](https://docs.astral.sh/uv/guides/scripts/)                              | nothing!                                                                                                                           |

uv only *partially* replicates Poetry and PDM because it has yet to implement package building and publishing, only project management. However, [they provide simple commands](https://docs.astral.sh/uv/guides/publish/) for publishing using existing tools and a uv project.

Several aspects of this release particularly stand out to me:

* `uv tool` and it's alias [`uvx`](https://docs.astral.sh/uv/guides/tools/) as an alternative pipx. I rely on pipx to install command line tools on my system (tox, ruff, uv, yamllint, mypy, etc). uvx combines this with the *blazing fast*  uv installer, adding new functionality like the ability to run a command without having installed it first (e.g. `uvx ruff` without first running `uv tool install ruff`).
* `uv python` to manage and install Python versions. Installing Python has long been a challenge with disparate solutions ([python.org](https://www.python.org/downloads/) installers, [homebrew](https://pydevtools.com/handbook/reference/homebrew.md),  [conda](https://pydevtools.com/handbook/reference/conda.md), [pyenv](https://pydevtools.com/handbook/reference/pyenv.md), [asdf](https://asdf-vm.com), ...); choosing an installation method has [boggled the mind](https://x.com/tdhopper/status/134674920243339264) of many aspiring data scientists. More important than the ability to install particular versions, uv *does not require the user to install Python* explicitly! Because uv is not written in Python,  you can [install it](https://docs.astral.sh/uv/getting-started/installation/#standalone-installer) without having Python on your machine, and if it cannot find Python, it will [quickly and automatically](https://docs.astral.sh/uv/guides/install-python/#automatic-python-downloads) install Python when it needs it.
* uv is seeking to be standards compliant. While uv is breaking much new ground, the team is seeking to adopt the standards provided by the Python [PEP](https://peps.python.org/pep-0001/) process. For example, the new `uv run` command which can execute a standalone Python script without the user managing a virtual environment or dependencies implements [PEP 723 inline script metadata](https://pydevtools.com/handbook/explanation/what-is-pep-723.md).

Despite uv adding to the complexity of choosing Python developer tooling by adding yet another option, I am optimistic that within a few years, it will be the default tool to recommend to Python developers for Python installation, project management, packaging, and environments.
