UV: Python包和项目管理器(从入门到不放弃教程)
目录
- UV: Python包和项目管理器(从入门到不放弃教程)
- 1. 为什么用uv,而不是conda或者pip
- 2. 安装uv(Windows)
- 2.1 powershell下载
- 2.2 winget下载
- 2.3 直接下载安装包
- 3. uv教程
- 3.1 创建虚拟环境 (`uv venv`)
- 4. uvx
- 5. 此pip非彼pip
- 6. uv没有虚拟环境的列表
UV: Python包和项目管理器(从入门到不放弃教程)
还在用慢吞吞的 pip 和略复杂的 conda 吗?试试 uv!🚀 这款用 Rust 打造的 Python 包管理器,速度快到飞起!⚡️ 集成虚拟环境管理,告别 virtualenv。安装、卸载、锁定依赖,统统快人一步!💨 让你的 Python 开发更流畅、更高效!✨
1. 为什么用uv,而不是conda或者pip
你还在为迟迟进不去conda
环境而烦恼吗?你是不是感觉pip
安装一些大点的Python包贼拉慢!
对,你不是一个人,是时候做个渣男,放弃旧爱conda/pip
,拥抱新欢uv
啦!
TL;DR: uv
之所以被开发者考虑用作 conda
或 pip
的替代品,主要是因为它号称自己比pip快10-100倍!这你敢信?!高低得安装一下尝尝鲜!
相对于 pip
:
- 速度更快:
uv
使用 Rust 编写,这使得它在包的安装、依赖解析和虚拟环境创建等方面通常比pip
快很多倍。尤其是在处理大型项目和复杂的依赖关系时,速度差异更为明显。 - 集成的环境管理:
uv
不仅处理包管理(像pip
那样),还内置了虚拟环境管理的功能(类似于virtualenv
)。这意味着你不需要单独使用virtualenv
来创建和管理虚拟环境,uv venv
命令就能完成。 - 更现代的设计:
uv
旨在解决pip
长期存在的一些性能和用户体验问题,例如依赖冲突处理和错误消息提示。 - 兼容性:
uv
在设计上力求与pip
的生态系统兼容,这意味着它仍然可以从 PyPI (Python Package Index) 安装包,并且理解requirements.txt
文件。
相对于 conda
:
- 更轻量级和更专注于 Python 包:
conda
是一个更通用的包管理器,它可以管理包括 Python、非 Python 的库(如 C/C++ 依赖)以及整个软件栈。uv
目前更专注于 Python 包的管理。如果你主要处理 Python 项目,并且不需要conda
的非 Python 包管理能力,uv
通常更轻量级。 - 速度: 在 Python 包的安装和环境创建方面,
uv
通常比conda
更快。conda
的依赖解析有时会比较慢。 - 更贴近
pip
的工作流程: 对于已经习惯了pip
和virtualenv
工作流程的开发者来说,uv
的某些命令和概念可能更容易理解和接受。 - 避免
conda
的一些复杂性:conda
的环境管理有时可能比较复杂,尤其是在处理不同频道(channels)和依赖冲突时。uv
的设计目标是更简洁和直接。
2. 安装uv(Windows)
具体安装文档可参考官方文档:https://docs.astral.sh/uv/getting-started/installation/
以下是在Windows系统下的几种安装方式。
2.1 powershell下载
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
2.2 winget下载
winget install --id=astral-sh.uv -e
2.3 直接下载安装包
🤣😂🤣😂 哎哟喂!本该一行命令轻松搞定,谁料卡在了 GitHub 这道墙🧱,😭。看来只能手动“搭梯子”去搬运资源了(🤫🤫🤫 你懂的)。
下载地址:uv-x86_64-pc-windows-msvc.zip
解压后,将解压后的文件夹目录设置环境变量即可生效。
3. uv教程
3.1 创建虚拟环境 (uv venv
)
-
功能: 创建一个新的 Python 虚拟环境。
-
示例:
# 在当前目录下创建一个名为 .venv 的虚拟环境,使用系统默认的 Python 版本 uv venv# 在当前目录下创建一个名为 my-project-env 的虚拟环境,使用指定的 Python 3.11 版本 uv venv -p python3.11 my-project-env# 在指定路径创建一个名为 custom-env 的虚拟环境,使用 Python 3.10 uv venv -p python3.10 /path/to/my/project/custom-env
3.2. 安装包 (uv pip install
)
-
功能: 在激活的虚拟环境中安装 Python 包。(ps:看到这里的
pip
老熟悉了,但是,此pip非彼pip,这里是uv本身的安装命令。) -
示例:
# 确保你已经激活了虚拟环境 # Windows (CMD): .\venv\Scripts\activate # macOS/Linux (Bash/Zsh): source venv/bin/activate# 安装 requests 包 uv pip install requests# 安装指定版本的 Flask 包 uv pip install Flask==2.2.2# 从 requirements.txt 文件安装所有依赖 uv pip install -r requirements.txt# 安装开发依赖 (通常在 requirements-dev.txt 中) uv pip install -r requirements-dev.txt -d dev
3.3. 卸载包 (uv pip uninstall
)
-
功能: 从激活的虚拟环境中卸载指定的 Python 包。
-
示例:
# 确保你已经激活了虚拟环境# 卸载 requests 包 uv pip uninstall requests# 卸载多个包 uv pip uninstall Flask Werkzeug
3.4. 列出已安装的包 (uv pip list
)
-
功能: 显示当前激活的虚拟环境中已安装的包及其版本。
-
示例:
# 确保你已经激活了虚拟环境 uv pip list
3.5. 导出 requirements 文件 (uv pip freeze
)
-
功能: 将当前激活的虚拟环境中已安装的包及其确切版本导出到
requirements.txt
文件中。 -
示例:
# 确保你已经激活了虚拟环境# 导出到默认的 requirements.txt 文件 uv pip freeze > requirements.txt# 导出到指定的文件 uv pip freeze > my_dependencies.txt
3.6. 运行工具 (uv tool run
) 或其别名 (uvx
)
-
功能: 运行由 Python 包提供的命令行工具,无需显式安装到当前虚拟环境或全局环境。
uv
会自动创建一个临时的隔离环境来运行该工具。 -
示例:
# 运行 black 代码格式化工具 uvx black .# 运行 flake8 代码检查工具 uv tool run flake8 my_module.py# 运行指定版本的 pylint uvx pylint@2.10.0 my_module.py
3.7. 锁定依赖 (uv pip compile
)
-
功能: 从
requirements.in
文件编译生成精确的锁定文件 (requirements.txt
),包含所有直接和间接依赖及其确切版本。这有助于实现可复现的构建。 -
示例:
# 假设你有一个 requirements.in 文件# 编译生成 requirements.txt uv pip compile requirements.in -o requirements.txt# 指定输出文件 uv pip compile input_deps.in -o locked_deps.txt
3.8. 同步依赖 (uv pip sync
)
-
功能: 根据锁定的
requirements.txt
文件同步当前虚拟环境中的依赖。如果虚拟环境中的包与锁定文件不一致,uv
会安装、升级或卸载包以使其与锁定文件匹配。 -
示例:
# 确保你已经激活了虚拟环境,并且有一个 requirements.txt 文件# 根据 requirements.txt 同步虚拟环境 uv pip sync requirements.txt# 同步指定的锁定文件 uv pip sync locked_dependencies.txt
3.9. 移除虚拟环境 (uv venv --remove
)
-
功能: 删除指定的虚拟环境。
-
示例:
# 删除当前目录下的名为 .venv 的虚拟环境 uv venv --remove .venv# 删除指定路径的虚拟环境 uv venv --remove /path/to/my/project/my-project-env
这些操作涵盖了使用 uv
进行 Python 项目开发和依赖管理的常见需求。记住在使用 uv pip install
, uv pip uninstall
, uv pip list
, uv pip freeze
, uv pip sync
等命令时,通常需要在你的虚拟环境被激活的状态下进行操作,以确保这些操作影响的是你的项目环境而不是全局环境。
4. uvx
当你在安装uv
的时候,同时也会安装uvx
, uvx
是一个无需安装即可运行 Python 工具的命令, uvx
专门用于调用由 Python 包提供的命令行工具,而无需将这些工具显式安装到项目的虚拟环境或全局环境中。
uv tool run
的别名:uvx
命令是uv tool run
的直接别名。这两个命令完全等效。- 在临时的、隔离的环境中安装工具: 当你使用
uvx <工具>
时,uv
会自动创建一个临时的、隔离的虚拟环境,将包含该工具的必要包安装到该环境中,运行该工具,然后通常会丢弃该临时环境(尽管它可能会被缓存以加快后续运行速度)。 - 类似于 Node.js 中的
npx
:uvx
的功能与 Node.js 生态系统中的npx
非常相似,允许你执行工具而无需全局安装它们。
5. 此pip非彼pip
uv
自身就实现了安装 Python 包的功能,它是一个替代 pip
的工具。 当你运行 uv pip install
时,uv
会使用它自己的内部逻辑来下载、解析和安装包,而不会依赖于系统中是否安装了 pip
。因此,如果你想使用 uv
来安装包,直接使用 uv pip install <包名>
即可,无需担心是否安装了 pip
。
uv pip install
是uv
提供的安装包的命令。uv
自身包含了安装包的逻辑,不需要依赖 于传统的pip
。- 即使你的系统中没有安装
pip
,你也可以直接使用uv pip install
来安装包。
6. uv没有虚拟环境的列表
用过conda的人都熟悉conda env list
来查看已经安装的虚拟环境有哪些。但是uv没有哦。