文章目录
- UV
-
- [🏗️ uv 的逻辑架构与功能定位](#🏗️ uv 的逻辑架构与功能定位)
- [🚀 如何安装 uv](#🚀 如何安装 uv)
- [💻 实际开发中的使用流程与命令示例](#💻 实际开发中的使用流程与命令示例)
-
- [1. 项目初始化与 Python 版本管理](#1. 项目初始化与 Python 版本管理)
- [2. 依赖管理与环境同步](#2. 依赖管理与环境同步)
- [3. 运行项目与脚本](#3. 运行项目与脚本)
- [4. 临时运行工具 (uvx)](#4. 临时运行工具 (uvx))
- [⚡ 以后都可以用uv来管理python程序和包了吗](#⚡ 以后都可以用uv来管理python程序和包了吗)
-
-
- [🚀 日常开发与项目管理:全面转向 uv](#🚀 日常开发与项目管理:全面转向 uv)
- [📦 底层本质:uv 依然是从 PyPI 拿包](#📦 底层本质:uv 依然是从 PyPI 拿包)
- [⚠️ 特殊场景:conda 依然有其不可替代性](#⚠️ 特殊场景:conda 依然有其不可替代性)
-
- conda
-
- [🏗️ Conda 的逻辑架构与功能定位](#🏗️ Conda 的逻辑架构与功能定位)
- [🚀 如何安装 Conda](#🚀 如何安装 Conda)
- [💻 实际开发中的使用流程与命令示例](#💻 实际开发中的使用流程与命令示例)
-
- [1. 创建新的虚拟环境](#1. 创建新的虚拟环境)
- [2. 激活与退出环境](#2. 激活与退出环境)
- [3. 安装与管理依赖包](#3. 安装与管理依赖包)
- [4. 环境的管理(查看、复制与删除)](#4. 环境的管理(查看、复制与删除))
- [Conda 怎么安装和管理 C++ 等非 Python 依赖](#Conda 怎么安装和管理 C++ 等非 Python 依赖)
-
- [💻 实际例子 1:Python 底层调用(数据科学/AI 场景)](#💻 实际例子 1:Python 底层调用(数据科学/AI 场景))
- [💻 实际例子 2:你自己的代码直接调用(高性能计算/C++开发场景)](#💻 实际例子 2:你自己的代码直接调用(高性能计算/C++开发场景))
- [📌 总结一下两者的区别](#📌 总结一下两者的区别)
- [⚡ 补充知识:Conda 与 Pip 的区别](#⚡ 补充知识:Conda 与 Pip 的区别)
UV
uv 是由 Astral 团队使用 Rust 语言开发的新一代 Python 包和项目管理工具。它的核心目标是替代并统一现有的零散工具(如 pip、virtualenv、pyenv、poetry、pipx 等),并且速度比传统工具快 10-100 倍。
下面为你详细介绍 uv 的逻辑架构、安装方法以及在实际开发中的完整使用流程。
🏗️ uv 的逻辑架构与功能定位
uv 是一个"一体化"的工具,它通过极高的性能和统一的命令接口,将 Python 开发的多个环节整合在一起。其核心逻辑架构可以看作是传统工具的现代化替代:
| 传统工具 | uv 替代方案 | 主要用途 |
|---|---|---|
| pip + virtualenv | uv venv / uv sync |
虚拟环境与包管理 |
| poetry / pdm | uv init / uv add |
项目初始化与依赖管理 |
| pyenv | uv python install |
Python 解释器版本管理 |
| pipx | uvx (或 uv tool run) |
独立命令行工具的运行与安装 |
| pip-tools | uv lock |
依赖锁定与跨平台锁文件生成 |
在底层,uv 利用 Rust 的并行处理能力来加速依赖解析,并配备了高效的线程安全缓存机制(缓存已下载的包、构建的 wheel 文件等),从而实现了极速的安装体验。
🚀 如何安装 uv
uv 支持 Windows、macOS 和 Linux。官方最推荐的方式是使用独立的安装脚本,这样无需预先安装 Python 或 Rust。
-
Windows (PowerShell):
powershellpowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" -
macOS 和 Linux:
bashcurl -LsSf https://astral.sh/uv/install.sh | sh -
通过 pip 安装(如果你已有 Python 环境):
bashpip install uv
安装完成后,可以通过 uv --version 验证是否安装成功。
💻 实际开发中的使用流程与命令示例
接下来,我们通过一个完整的实际开发场景,来演示 uv 的核心命令格式。
1. 项目初始化与 Python 版本管理
假设我们要创建一个名为 my-project 的新项目,并希望指定使用 Python 3.12 版本。
bash
# 创建并初始化新项目
uv init my-project
cd my-project
# 查看当前系统可用的 Python 版本
uv python list
# 为当前项目固定 Python 版本(会在目录下生成 .python-version 文件)
uv python pin 3.12
# 如果本地没有该版本的 Python,uv 会自动帮你下载并安装
uv python install 3.12
执行 uv init 后,会自动生成标准的项目结构,包括 pyproject.toml(项目配置)、.python-version(Python版本记录)、README.md 以及初始的源代码目录。
2. 依赖管理与环境同步
在项目开发中,我们需要添加各种第三方库。uv 会自动更新 pyproject.toml 并生成 uv.lock 锁定文件,确保团队成员的环境完全一致。
bash
# 添加生产环境依赖(例如 web 框架和数据处理库)
uv add fastapi "pandas>=2.0.0"
# 添加开发环境依赖(例如代码格式化工具和测试框架)
uv add --dev pytest black ruff
# 根据 pyproject.toml 和 uv.lock 同步安装所有依赖到虚拟环境
uv sync
uv sync 会根据锁定文件精确安装依赖,彻底解决"在我的机器上能运行"的环境不一致问题。
3. 运行项目与脚本
uv 允许你直接在项目的隔离环境中运行代码,而无需手动激活虚拟环境。
bash
# 直接在项目环境中运行 Python 解释器
uv run python
# 运行项目中的某个脚本
uv run python src/main.py
# 以模块方式运行
uv run -m my_project.main
4. 临时运行工具 (uvx)
在日常开发中,我们经常需要用到一些一次性的命令行工具(比如用 ruff 检查代码,或用 httpie 测试接口)。uvx 可以在不污染全局环境的情况下,临时下载并运行这些工具。
bash
# 临时下载并运行 ruff 进行代码检查(用完即走,不永久安装)
uvx ruff check .
# 临时运行 httpie 发送网络请求
uvx --from httpie http https://example.com
如果你希望永久安装某个工具到独立的全局隔离环境中,可以使用 uv tool install <工具名>。
uv 凭借其极快的速度和现代化的工作流,正在迅速成为 Python 社区中最受欢迎的项目管理工具之一。你可以从上述的基础命令开始,逐步体验它带来的高效开发体验!
⚡ 以后都可以用uv来管理python程序和包了吗
在绝大多数日常开发场景中,完全可以用 uv 替代 pip,并且体验会好得多。
为了更清晰地了解它们的过渡关系,可以从以下三个层面来理解:
🚀 日常开发与项目管理:全面转向 uv
对于创建新项目、安装第三方库、管理依赖版本等常规操作,uv 已经可以完美且高效地接管 pip 的工作。
- 速度极快 :得益于 Rust 语言和全局缓存机制,
uv安装包的速度通常比pip快 10 到 100 倍。 - 功能更强 :
uv不仅能装包,还能帮你管理虚拟环境(替代venv/virtualenv)、管理 Python 解释器版本(替代pyenv),以及生成跨平台的锁定文件(uv.lock)以确保团队环境一致。 - 无缝兼容 :如果你习惯了
pip的命令,uv也提供了完全兼容的接口。例如,你可以直接用uv pip install requests来代替pip install requests,学习成本几乎为零。
📦 底层本质:uv 依然是从 PyPI 拿包
虽然不再需要敲 pip 命令,但 uv 本质上依然是一个 Python 包管理器。当使用 uv add 或 uv pip install 时,它依然是去 Python 官方仓库(PyPI)下载和安装标准的 Python 库。所以,能用 pip 安装的库,用 uv 同样都能安装。
⚠️ 特殊场景:conda 依然有其不可替代性
虽然 uv 能替代 pip,但它并不能完全替代 conda。这是很多开发者容易混淆的地方:
- 纯 Python 库 :比如
requests、fastapi、pandas等,用uv是最快最省心的选择。 - 涉及底层系统依赖的库 :如果在数据科学或机器学习领域,经常需要安装包含 C/C++ 库、CUDA 驱动等非 Python 组件的复杂环境(例如某些特定版本的 TensorFlow 或科学计算底层库),
conda依然是目前最稳妥的选择。因为它不仅能管 Python 包,还能跨语言管理底层的系统级依赖。
总结一下:
以后做 Python 开发(无论是写 Web、爬虫还是自动化脚本),完全可以把 pip、virtualenv、poetry 这些工具抛在脑后,直接拥抱 uv 。只有在处理极其复杂的科学计算环境或底层系统依赖时,才需要考虑配合 conda 使用。
conda
Conda 是一个开源的软件包管理系统 和环境管理系统,它最初是为 Python 程序创建的,但现在已经支持为任何语言(如 R、Java、C/C++ 等)打包和分发软件。
如果说 uv/pip 的核心职责是管理 Python 世界的依赖,那么 Conda 的格局则要大得多------它不仅能管 Python 库,还能跨语言管理底层的系统级依赖(比如 C/C++ 库、CUDA 驱动等)。这也是为什么在数据科学、机器学习、生物信息学等领域,Conda 依然是不可替代的神器。
下面为你详细介绍 Conda 的逻辑架构、安装方法以及核心使用流程。
🏗️ Conda 的逻辑架构与功能定位
Conda 的核心优势在于"跨语言"和"二进制包管理"。它的逻辑架构可以拆解为以下几个关键点:
| 核心特性 | 说明 | 解决了什么痛点 |
|---|---|---|
| 跨语言包管理 | 不仅管理 Python 包,还能安装和管理 R、Ruby、C/C++ 库等非 Python 依赖。 | 解决涉及复杂底层编译依赖(如 TensorFlow、PyTorch 的 CUDA 配置)的安装难题。 |
| 环境隔离 | 可以在本地创建多个完全独立的虚拟环境,每个环境拥有自己的 Python 版本和依赖包。 | 避免不同项目之间的依赖冲突(例如项目A需要 Python 3.7,项目B需要 Python 3.11)。 |
| 预编译二进制 | Conda 安装的包大多是预编译好的二进制文件(.tar.bz2 或 .conda 格式)。 |
无需在本地进行耗时的编译过程,极大提高了大型科学计算库的安装成功率和速度。 |
🚀 如何安装 Conda
Conda 主要通过以下两种发行版来安装,可以根据需求选择:
- Miniconda(强烈推荐):这是 Conda 的最小化安装包。它只包含 Conda 本身、Python 以及少量的基础依赖包。如果希望保持环境的轻量级,或者想要从零搭建所需的环境,Miniconda 是最佳选择。
- Anaconda:这是一个面向科学计算的"全家桶"发行版。它自带了 Conda、Python 以及超过 300 个常用的数据科学包(如 NumPy、Pandas、Matplotlib 等)。适合新手开箱即用,但体积较大(通常占用几个 GB 的空间)。
安装方式:
可以前往 Anaconda 官网下载对应操作系统(Windows / macOS / Linux)的 Miniconda 或 Anaconda 安装脚本/程序,按照指引一步步完成安装即可。
💻 实际开发中的使用流程与命令示例
接下来,通过一个实际的场景,来看看 Conda 是如何管理环境和依赖的。
1. 创建新的虚拟环境
假设要为一个深度学习项目创建一个独立的环境,指定使用 Python 3.9 版本,并将其命名为 dl_env。
bash
# 创建一个名为 dl_env 的环境,并指定 Python 版本为 3.9
conda create -n dl_env python=3.9
执行后,Conda 会在你的电脑中开辟一个完全隔离的空间,并在其中安装好 Python 3.9。
2. 激活与退出环境
创建好环境后,需要"进入"这个环境才能在其中工作。
bash
# 激活(进入)dl_env 环境
# 激活成功后,命令行提示符前面会出现 (dl_env) 的字样
conda activate dl_env
# 退出当前环境,回到默认的 base 环境
conda deactivate
3. 安装与管理依赖包
在激活的环境中,可以随意安装各种库。Conda 会自动帮你处理复杂的依赖关系。
bash
# 在当前激活的环境中安装 numpy 和 pandas
conda install numpy pandas
# 查看当前环境中已经安装了哪些包
conda list
# 如果你想从特定的社区频道安装(比如生物信息学常用的 bioconda)
# -c 参数用于指定频道(channel)
conda install bwa -c bioconda
4. 环境的管理(查看、复制与删除)
在日常维护中,你可能需要对已有的环境进行操作。
bash
# 查看当前电脑上存在的所有虚拟环境
conda env list # 或者使用 conda info --envs
# 复制一个现有的环境(比如把 dl_env 完整克隆一份叫 dl_env_backup)
conda create -n dl_env_backup --clone dl_env
# 删除一个不再需要的环境(--all 表示删除该环境及其内部所有包)
conda remove -n dl_env --all
Conda 怎么安装和管理 C++ 等非 Python 依赖
简单来说,Conda 可以直接安装 C++ 库、编译器甚至 CUDA 驱动。它不仅仅是一个 Python 包管理器,更是一个跨语言的系统级环境管理器。
在纯 Python 的世界里(比如用 uv 或 pip),如果你要安装一个包含 C/C++ 代码的库(例如 NumPy),pip 通常会尝试在你的电脑上下载源码并调用你系统自带的编译器(如 Windows 的 MSVC 或 Linux 的 GCC)进行编译。一旦你的电脑缺少对应的编译环境或版本不匹配,就会报错。
而 Conda 的做法是 :它仓库里的包(比如 PyTorch 或 NumPy)都是官方或社区提前编译好的二进制文件 。当你用 Conda 安装时,它会把 Python 库以及它所需要的底层 C++ 运行库(比如微软的 MSVC 运行时、Linux 的 glibc 等)一起打包下载到你的虚拟环境中。这样,无论你的操作系统原本是什么状态,Conda 都能保证这个环境里的所有依赖是自给自足且完美匹配的。
💻 实际例子 1:Python 底层调用(数据科学/AI 场景)
场景: 你在北京做 AI 开发,需要安装 PyTorch 深度学习框架。
痛点: PyTorch 的核心计算是用 C++ 和 CUDA(NVIDIA 显卡加速库)写的。如果用普通方式安装,经常会出现找不到 CUDA、或者缺少 C++ 动态链接库(比如在 Windows 上常见的 DLL load failed: 找不到指定的模块)这类玄学报错。
使用 Conda 解决:
你只需要在 Conda 环境中输入一行命令:
bash
conda install pytorch torchvision pytorch-cuda=11.8 -c pytorch -c nvidia
Conda 在后台做了什么?
- 它不仅下载了 PyTorch 的 Python 接口代码。
- 它还自动下载并配置好了 PyTorch 依赖的 C++ 运行时组件 以及对应版本的 CUDA 工具包。
- 这些底层的 C++/CUDA 库被隔离安装在你当前的 Conda 虚拟环境里,完全不会干扰你电脑的系统环境。
对你来说,你感觉只是装了一个 Python 库,但实际上 Conda 帮你把背后庞大且复杂的 C++/CUDA 依赖全部搞定了。这就是为什么在 AI 领域大家首选 Conda。
💻 实际例子 2:你自己的代码直接调用(高性能计算/C++开发场景)
场景: 假设你的项目需要用 C++ 写一段高性能算法,并且你想在自己的 Python 代码中调用它;或者你需要在一个没有管理员权限的服务器(比如学校或公司的超算平台)上使用最新版的 GCC/G++ 编译器。
使用 Conda 解决:
你可以直接在 Conda 环境中安装一套完整的 C++ 编译工具链:
bash
# 创建一个专门用于 C++ 开发的环境
conda create -n cpp_env
conda activate cpp_env
# 直接从 Conda 安装 GCC 和 G++ 编译器(以 Linux/macOS 为例)
conda install -c conda-forge gcc gxx
这意味着什么?
- 不需要管理员权限:哪怕你的电脑或服务器系统自带的 GCC 版本很老,你也可以通过 Conda 在自己用户目录下安装一个最新版的 GCC。
- 环境隔离 :这个编译器只存在于
cpp_env这个虚拟环境里。当你激活这个环境时,终端里的gcc和g++命令就会自动指向 Conda 安装的版本;退出环境后,又恢复成系统原来的样子。 - 直接调用 :你可以在这个环境里正常编写
.cpp文件,使用g++ main.cpp -o main进行编译,然后用自己的 Python 代码去调用生成的可执行文件或动态库。
📌 总结一下两者的区别
| 需求场景 | 典型例子 | 谁在调用 C++ 库? | Conda 的作用 |
|---|---|---|---|
| 数据科学 / AI | 安装 PyTorch, TensorFlow, NumPy | Python 库的底层在调用(你无感) | 帮你把 Python 库和它依赖的复杂 C++/CUDA 二进制文件一起装好,避免编译和 DLL 报错。 |
| 高性能计算 / 开发 | 自己写 C++ 代码、编译开源 C++ 项目 | 你自己写的代码在直接调用 | 给你提供一个隔离的、现成的 C++ 编译器(GCC/Clang)和 C++ 库(如 Boost、OpenCV),无需折腾系统环境变量。 |
所以,回到你最开始的问题:涉足这些领域时,Conda 不仅能管理 Python 库,还能像一个全能的"系统管家",帮你把底层的 C++ 库、编译器甚至显卡驱动都安排得明明白白。
⚡ 补充知识:Conda 与 Pip 的区别
虽然两者都是包管理器,但它们的底层逻辑完全不同:
- Pip :是 Python 官方的包安装器,专门从 PyPI(Python Package Index)下载和安装 纯 Python 的库。
- Conda:是一个跨平台的语言无关的包管理器。它下载的包可能包含 Python 代码,也可能包含 C 库、可执行程序等。Conda 在安装时会综合检查当前环境的所有依赖,确保不会产生冲突。
总结一下:
如果你的开发主要围绕 Web 后端、自动化脚本或纯 Python 应用,uv/pip 绝对是最快最现代的选择。但一旦你涉足数据科学、人工智能、高性能计算等需要处理大量非 Python 底层依赖的领域,Conda 凭借其强大的跨语言环境管理能力,依然是目前最稳妥、最主流的解决方案。