UV 的使用
最近看到很多人说uv很好用,于是就想试一下,现在已经用了一段时间了,我已经放弃了之前常用的 anaconda,转而使用uv了。
对于管理python环境来说,uv确实是非常好用的工具。它不仅可以轻松创建和管理虚拟环境,还能方便地安装和更新包。
什么是 uv?

uv 是一个现代化的 Python 包管理工具,旨在简化 Python 环境的创建和包的安装。它提供了一个简单的命令行界面,让用户能够快速地创建虚拟环境、安装依赖项,并且支持多种 Python 版本。
简单来说,它就像是一个更轻量级、更快速的替代品,类似于 pip 和 virtualenv 的结合体。
好在哪儿?
1、 轻。Anaconda 太重了动则几个 G。
2、 创建虚拟环境真的是非常快:使用 uv 创建虚拟环境非常快速,几乎是瞬间完成的。
3、 安装包很快:使用 uv 安装包的速度也非常快,比 pip / conda 快的多。
4、 支持多个 Python 版本,可以轻松切换。
5、 依赖管理很好,可以自动解决依赖关系,它会把所有依赖项的关系链理清楚,能够锁定版本,确保环境的一致性。
6、 同步功能非常好。使用 uv sync 可以一键同步环境,确保不同机器上的环境一致,不需要写 requirements.txt。
7、 有一点我单独拿出来,anaconda 每次都要激活 activate 才能使用环境,在批处理脚本里很麻烦,而 uv 直接在命令行里 run 一下就能使用当前的虚拟环境了,非常方便。
8、 安装包的时候,uv 会记录安装的包和版本信息,生成一个 lock 文件,这样就能确保环境的一致性,可以理解为:pip 每安装一个包就会更新 requirements.txt,而 uv 则是安装包的时候会更新 lock 文件,这个动作不需要我们手动操作。
9、 支持硬链接,同一个盘符下(项目和UV是否在同一个盘下)创建虚拟环境时,uv 会使用硬链接来节省磁盘空间,这样就不需要为每个虚拟环境复制一份 Python 解释器了。
使用方式
安装
安装 uv 非常简单,如果系统已经安装了 Python/pip, 可以通过 pip 安装:
pip install uv
如果没有安装 Python:
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Windows 可能需要主题,Powershell 的安全策略可能需要调整一下,调整方式如下,在管理员模式下运行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
安装完成后,就可以使用 uv 来创建虚拟环境了:
创建项目
uv init myprojectcd myproject
如果需要指定 Python 版本:
uv init myproject --python 3.10cd myproject
这条命令会在当前目录下创建一个名为 myproject 的新目录,并在其中初始化一个新的 Python 项目。它会自动创建一个虚拟环境,并生成一个 pyproject.toml 文件来管理项目的依赖项。
目录结构如下:
myproject/├── .gitignore├── .python-version├── main.py├── pyproject.toml└── README.md
安装包
我们尝试安装一个包:
uv add requests
这条命令会安装 requests 包,并且自动更新 pyproject.toml 和 lock 文件,记录安装的包和版本信息。
运行项目
uv run main.py
这条命令会在当前的虚拟环境中运行 main.py 文件,无需手动激活环境,它会调用 .venv 目录下的 Python 解释器。
如果这是普通的 项目,uv 会优先使用当前目录下的 .venv 目录中的 Python 解释器来运行,如果没有找到 .venv 目录,uv 会继续往上级目录查找,直到找到一个包含 .venv 目录的项目为止,如果一直没有找到,uv 就会使用系统的 Python 解释器来运行。
其他运行方式:
uv run python main.py
uv run pip install requests
其他功能
uv sync
这条命令会根据 pyproject.toml 和 lock 文件来同步环境,安装缺失的包,更新过时的包,确保环境的一致性。
比方说我们在另一台机器上克隆了这个项目,运行 uv sync 就能自动安装所有依赖项,确保环境和原来的一模一样,不需要手动安装每个包。
设置国内镜像源:
uv config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
还有几个环境变量:
UV_HOME=uv 的配置文件和数据存储目录,默认是用户主目录下的 .uv 目录。UV_INSTALL_DIR=uv 安装目录,默认是 UV_HOME 下的 install 目录, 可以在安装前设置这个环境变量来指定安装目录。UV_LINK_MODE=uv 创建虚拟环境时使用的链接模式,默认是 "copy",可以设置为 "hard" 来使用硬链接,或者 "symlink" 来使用符号链接。UV_PYTHON_INSTALL_DIR=uv 安装 Python 版本的目录,默认是 UV_HOME 下的 python 目录,可以在安装前设置这个环境变量来指定 Python 安装目录。
缺点
当前我主要就遇到一个问题,就是 uv 的两个源,下载python和pip包。在国内的环境下,pip包倒是可以通过设置国内镜像源来解决,但下载python的源就比较麻烦了,uv默认是从国外的源下载python的,下载指定python版本就比较慢了,需要配置好网络环境。如果系统已经安装了python,uv也可以直接使用系统的python,这样就不需要下载了。
总结
好用。强烈推荐。