使用 uv 管理 Python 版本
管理管理不同版本的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