跳到内容
观澜涉川 · 札记EN

使用 uv 管理 Python 版本

· 约 2 分钟阅读

管理管理不同版本的Python,以及如何管理不同版本的依赖包,是让每一个 Python 用户抓狂的问题。为此,历史上出现过很多工具,试图解决这种版本管理问题:pyenv、pyenv-win、asdf-python、poetry、virtualenv、venv、rye、pdm……这个名单可能还会增加。

而 uv 是一个用 Rust 编写的号称极快的 Python 软件包和项目管理工具。尽管 uv 提供了一站式的解决方案,但是在遗留项目上,可能只使用其他的一小部分功能。本文介绍使用 uv 管理 Python 版本的实践。

安装 uv

asdf 可管理很多工具的版本,可惜它不是跨平台的,在 Windows 上无法使用。而 uv 的一个优势就是“跨平台”,可以在 Linux、MacOS 和 Windows 上运行。安装方法见官网的《Installing uv》。它包含两个可执行文件 uv 和 uvx。

列出可用的 Python

$ uv python list

输出结果包括当前可安装的 Python 版本,以及本机已安装的 Python 版本。在 MacOS 上,它至少识别出了系统内置的Python,以及用 asdf 安装的 Python。

安装 Python 版本

比如安装 3.11 版本的 Python:

$ uv python install 3.11
Installed Python 3.11.10 in 4.92s
+ cpython-3.11.10-macos-x86_64-none

更多用法可见 《Installing Python》。

使用 uv

运行 Python 脚本

使用 uv 命令执行脚本,具体见文档《Running scripts》。

管理 Python 项目

uv 可用户管理 Python 项目,适合新起的项目。具体用法见文档《Working on projects》。

锁定 Python 版本

在本机有多个 Python 版本时,可以使用 pin 子命令锁定版本,其实就是创建了一个 .python-version 文件:

$ uv python pin 3.12
Pinned `.python-version` to `3.12`

查看文件内容:

$ cat .python-version
3.12

使用虚拟环境

对于遗留项目,很难使用 uv 运行 Python 脚本。为此,可使用 uv 创建虚拟环境,然后激活后使用。这跟 venv 的用法很像,但略有不同。

创建虚拟环境:

$ uv venv

激活虚拟环境,再次使用 venv 子命令:

$ uv venv

或者使用 source 来激活:

$ source .venv/bin/activate

需要注意的是,虚拟环境中并没有 pip 模块。尝试运行 pip 模块:

$ python -m pip list
xxxxx/.venv/bin/python: No module named pip

此时就会失败。为此,可以使用 uv pip install 命令安装一个 pip:

$ uv pip install pip

这个用法看起来很怪诞,但确实可行。再此执行的结果如下:

$ python -m pip list
Package Version
------- -------
pip 24.3.1