使用 uv 管理 Python 版本

2024-11-01#Python

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

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

安装 uv 🔗

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

列出可用的 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

加载中...