还在用慢吞吞的 pip 和略复杂的 conda 吗?试试 uv! 这款用 Rust 打造的 Python 包管理器,速度快到飞起!⚡️ 集成虚拟环境管理,告别 virtualenv。安装、卸载、锁定依赖,统统快人一步! 让你的 Python 开发更流畅、更高效!✨
你还在为迟迟进不去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
:
conda
是一个更通用的包管理器,它可以管理包括 Python、非 Python 的库(如 C/C++ 依赖)以及整个软件栈。uv
目前更专注于 Python 包的管理。如果你主要处理 Python 项目,并且不需要 conda
的非 Python 包管理能力,uv
通常更轻量级。uv
通常比 conda
更快。conda
的依赖解析有时会比较慢。pip
的工作流程: 对于已经习惯了 pip
和 virtualenv
工作流程的开发者来说,uv
的某些命令和概念可能更容易理解和接受。conda
的一些复杂性: conda
的环境管理有时可能比较复杂,尤其是在处理不同频道(channels)和依赖冲突时。uv
的设计目标是更简洁和直接。具体安装文档可参考官方文档:https://docs.astral.sh/uv/getting-started/installation/
以下是在Windows系统下的几种安装方式。
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
winget install --id=astral-sh.uv -e
哎哟喂!本该一行命令轻松搞定,谁料卡在了 GitHub 这道墙,。看来只能手动“搭梯子”去搬运资源了( 你懂的)。
下载地址:uv-x86_64-pc-windows-msvc.zip
解压后,将解压后的文件夹目录设置环境变量即可生效。
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 [email protected] 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
等命令时,通常需要在你的虚拟环境被激活的状态下进行操作,以确保这些操作影响的是你的项目环境而不是全局环境。
当你在安装uv
的时候,同时也会安装uvx
, uvx
是一个无需安装即可运行 Python 工具的命令, uvx
专门用于调用由 Python 包提供的命令行工具,而无需将这些工具显式安装到项目的虚拟环境或全局环境中。
uv tool run
的别名: uvx
命令是 uv tool run
的直接别名。这两个命令完全等效。uvx <工具>
时,uv
会自动创建一个临时的、隔离的虚拟环境,将包含该工具的必要包安装到该环境中,运行该工具,然后通常会丢弃该临时环境(尽管它可能会被缓存以加快后续运行速度)。npx
: uvx
的功能与 Node.js 生态系统中的 npx
非常相似,允许你执行工具而无需全局安装它们。uv
自身就实现了安装 Python 包的功能,它是一个替代 pip
的工具。 当你运行 uv pip install
时,uv
会使用它自己的内部逻辑来下载、解析和安装包,而不会依赖于系统中是否安装了 pip
。因此,如果你想使用 uv
来安装包,直接使用 uv pip install <包名>
即可,无需担心是否安装了 pip
。
uv pip install
是 uv
提供的安装包的命令。uv
自身包含了安装包的逻辑,不需要依赖 于传统的pip
。pip
,你也可以直接使用 uv pip install
来安装包。用过conda的人都熟悉conda env list
来查看已经安装的虚拟环境有哪些。但是uv没有哦。