写Rust的时候,对项目管理工具cargo很是喜欢,当时就觉得要是python也能有一个这样的管理工具就好了。Astral公司在推出了python linter的ruff之后,又推出了uv,一个cargo味很重的python包和项目管理工具。或者说,uv是python的cargo。更加难能可贵的是uv使用Rust编写,速度快,性能强,还不必担心潜在的跨平台缺陷。

网络上很多人介绍uv都是说安装项目快,其中更大的意义是python有了一个稳定且高性能的项目管理工具,恰好这个工具很快很稳定。这一点上,写过Rust的人应该深有同感。

安装

对于Unix-like系统:

curl -LsSf https://astral.sh/uv/install.sh | sh

对于Windows系统:

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

常见使用命令

以下是一个简单的示例,初始化项目:

uv init test_uv # 初始化项目,就是cargo的翻版。
Initialized project `test-uv` at `D:\Code\Python\test_uv` # 执行结果

初始的项目文件如下,默认使用本机已经安装的python版本。

    目录: D:\Code\Python\test_uv


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          2025/8/3     19:51            109 .gitignore
-a----          2025/8/3     19:51              5 .python-version
-a----          2025/8/3     19:51             85 main.py
-a----          2025/8/3     19:51            153 pyproject.toml
-a----          2025/8/3     19:51              0 README.md

其中的pyproject.toml记录项目元信息,比如项目名称和依赖等内容。

[project]
name = "test-uv"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "requests>=2.32.4",
]

安装python的包很简单,直接使用uv命令即可。会使用系统的默认python,并将其复制到当前目录的.venv下,在其中安装包,避免干扰。

uv add requests
Using CPython 3.12.10 interpreter at: C:\Program Files\Python3\python.exe
Creating virtual environment at: .venv
Resolved 6 packages in 2.59s
Prepared 5 packages in 1.59s
░░░░░░░░░░░░░░░░░░░░ [0/5] Installing wheels...                                                                         
Installed 5 packages in 38ms
 + certifi==2025.8.3
 + charset-normalizer==3.4.2
 + idna==3.10
 + requests==2.32.4
 + urllib3==2.5.0

如果遇到了warning: Failed to hardlink files; falling back to full copy. This may lead to degraded performance.警告,是Windows系统的文件系统的问题,比如安装在C盘的python无法硬链接到D盘的目录中,可以设置一个名为UV_LINK_MODE的环境变量,赋值为copy,避免使用硬链接。

env

其他pip的命令,只需要在其之前添加uv即可:

uv pip list # 查看当前安装的包
Package            Version
------------------ --------
certifi            2025.8.3
charset-normalizer 3.4.2
idna               3.10
requests           2.32.4
urllib3            2.5.0

运行程序,也是cargo的手感。非要说缺点的话,这里如果可以支持uv run那就完美了。

uv run .\main.py
Hello from test-uv!

切换python版本也很简单,直接使用``

uv python list # 查看所有可用的python版本
python install 3.13 # 安装指定版本,这将安装在当前用户的目录下

其他常用命令

其他常见命令可以浏览uv官方文档,基本就是cargo的习惯。

问题和注意事项

现在还是0.8.x版本,有一些不顺手的操作,比如刚才提到的uv runUV_LINK_MODE的硬链接问题等。
此外,第三方支持力度也不够好,比如PowerShell的限制倒置VSCode无法解析python环境,虽然命令行可以正常工作。可以使用Set-ExecutionPolicy RemoteSigned -Scope CurrentUser解开这个限制。

标签: python, uv

添加新评论