一、背景介绍

在 AI 应用开发日益普及的今天,Python 依然是构建大语言模型(LLM)应用的首选语言。而 LangChain 作为连接模型与应用的桥梁框架,其环境搭建的规范性直接影响后续开发的效率和稳定性。

本文将系统梳理 Python 的环境搭建流程,并重点对比两种主流的依赖管理方案:经典的 pip + conda 组合现代化的 uv 工具。前者是大多数开发者熟悉的路径,后者则代表了 Python 生态依赖管理的新范式。


二、方案分析:工具选型与环境隔离的本质

搭建 Python 开发环境需要两类核心工具:环境管理器包安装器

环境管理方面,本文采用 Anaconda(包含 Python、conda 及常用数据科学库的一站式发行包)。需要厘清的是,Anaconda 与 conda 的关系:Anaconda 是完整套件,conda 是其中的跨语言包管理器与环境管理器。Anaconda 自带 conda,conda 也可独立安装使用。核心区别在于 Anaconda 是完整套件,conda 是轻量化管理工具。

包安装器:这里实践了pip和uv两种方式。在 python 环境中安装第三方库的工具有 uv 和 pip。这两者类似于 node 环境中的 npm。pip 是 Python 自带、最标准的库安装工具。从 Python 3.4 版本开始就内置了,你用 Conda 或 venv 创建虚拟环境时,里面自带的安装工具就是它。uv 是一个由 Rust 语言重写的,旨在替代 pip 等多个工具的新一代安装器。它不是 Python 自带的,需要单独安装。

pip 作为经典的安装工具,遵循全局安装模式,将第三方库直接安装到当前激活的 Python 环境中。pip 是将所有库都安装在 Python 环境的全局 site-packages 目录下。这种“环境级”的视角存在固有缺陷:若在同一环境中开发多个项目,且它们依赖同一库的不同版本,就会因版本覆盖导致不可预测的冲突。因此,为每个项目创建独立的虚拟环境(venv/conda)是必要的补救措施。传统的解决方案是用 venv 或 conda 为每个项目创建独立的虚拟环境,实现“环境级隔离”。

uv 则更进一步。它采用项目级依赖管理,能自动为每个项目创建隔离环境,并锁定所有依赖。这不仅从根源上杜绝了依赖冲突,还让整个安装过程变得极快,确保了项目在不同机器上的完全一致性。 uv 的出现,则将管理粒度从“环境”进一步细化到了“项目”。作为一款融合了包管理和环境管理功能的现代工具,uv 能为每个项目自动创建专属的隔离环境、解析并锁定依赖树。这使得多个项目即使在同一设备上运行,也能各自使用完全不同的依赖版本而互不干扰,实现了真正项目粒度的依赖管理。

需要澄清的是,pip 本身的核心职责是包安装,它依赖 venv 等工具来实现环境隔离,其传统的 requirements.txt 格式也只能管理顶层依赖,难以保证构建的完全可复现。在此背景下,uv 提供了一种更现代的范式。它将“环境创建”与“包安装”深度整合,并引入项目级锁文件 uv.lock。当你执行 uv add 时,uv 会为项目生成或更新一个精确的 uv.lock 文件,哈希锁定整个依赖树的所有包及其版本。这意味着:
· 彻底的项目级隔离:每个项目拥有自己精确的依赖组合,从根本上杜绝了版本覆盖的风险。
· 跨环境的一致性:无论是开发、测试还是生产环境,uv.lock 能确保所有开发者、CI/CD 服务器和部署平台安装的依赖完全一致,实现了端到端的可复现构建。
uv 将包安装和管理与项目紧密绑定,实现了“项目粒度”的依赖管理与隔离。 它是通过为项目创建独立的虚拟环境,并用锁文件精确控制其中的每一个依赖来做到的。

维度 pip(经典模式) uv(现代模式)
管理粒度 环境级:所有库安装在当前环境的全局 site-packages 项目级:每个项目拥有独立的隔离环境和精确锁定的依赖树
环境创建 手动:conda createpython -m venv 自动:uv init 或首次 uv add 时自动生成 .venv
环境激活 必须手动执行 conda activate(容易遗忘) 无需手动:uv run 自动在项目环境中执行
依赖记录 手动:pip freeze > requirements.txt(易遗漏,仅记录顶层依赖) 自动:更新 pyproject.toml,并生成 uv.lock(哈希锁定完整依赖树)
跨环境一致性 依赖开发者自律,难以保证构建可复现 uv.lock 确保所有开发者、CI/CD 和部署平台的依赖完全一致
安装速度 标准速度 Rust 重写,极快

IDE 选择上,VS Code、PyCharm 或 Cursor 均可,根据个人偏好决定。

三、实操步骤:两种方案的具体搭建

3.1 第一阶段:使用 conda 创建 Python 环境

无论后续选择 pip 还是 uv,都需要先有一个基础的 Python 环境。这里以 Python 3.11 为例。

方案 A:命令行方式

创建环境:

conda create -n python_3_11_5 python=3.11

命令解析:

  • conda create:Conda 的核心命令,用于创建新环境;
  • -n python_3_11_5-n--name 的缩写,指定环境名称;
  • python=3.11:指定在新环境中安装 Python 3.11 版本。

激活环境:

conda activate python_3_11_5

执行后,终端提示符的开头会从 (base) 变成 (python_3_11_5),说明环境切换成功。

注意:若不执行激活操作,默认工作在 base 环境。conda 的激活机制类似于 Node 生态中的 nvm use

方案 B:Anaconda Navigator 可视化操作

创建环境:

  1. 打开 Anaconda Navigator,选择 Environments 菜单;
  2. 点击右侧的 Create 按钮;
  3. 在弹窗中填写环境名称(如 python_3_11_5),选择 Python 版本(3.11.x);
  4. 点击 Create,等待环境创建完成。
    在这里插入图片描述

激活环境:

在 Environments 列表中选择刚创建的环境,点击播放按钮,选择 Open Terminal。系统会自动打开终端并执行激活命令,提示符变化同上。执行成功后,终端提示符的开头会从(base)变成(python_3_11_5),说明环境切换成功了。
在这里插入图片描述
在这里插入图片描述


3.2 第二阶段:安装 LangChain

方案A: pip 安装
步骤 1:确认环境状态

激活环境后,先查看当前已安装的包:

pip list

刚创建的环境中通常只有 pipsetuptoolswheel 等基础组件。这就像一个全新手机,应用商店里只有必备的系统组件。

步骤 2:安装 LangChain
pip install langchain

pip 会自动解析并安装 LangChain 及其所有依赖包。

步骤 3:记录依赖快照
pip freeze > pypackage-langchain.txt

这行命令将当前环境中所有已安装的第三方库及其精确版本号导出到文本文件。可以理解为:给你的 Python 环境拍了一张清晰的"全家福"。

生成的 pypackage-langchain.txt 内容示例:

langchain==1.0.0
langchain-core==1.0.1
# ... 以及所有其他被连带安装的依赖包和它们的版本

这张"快照"的核心价值在于环境复现。将代码和该文件分享给协作者,他们只需在新环境中执行:

pip install -r pypackage-langchain.txt

即可精确复刻你的依赖环境,避免"在我电脑上能跑"的尴尬。


方案B:uv 安装 LangChain

uv 的理念是**“项目即环境”**,它会自动处理环境隔离,无需手动激活/退出。

步骤 1:安装 uv

uv 的理念是 “项目即环境”,它会自动为你处理环境隔离。如果你的电脑上还没有 uv,需要先安装它。macOS/Linux/Windows(PowerShell)通用命令:

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

安装成功后,关闭并重新打开终端,验证安装:

uv --version
# 输出示例:uv 0.11.6 (65950801c 2026-04-09 aarch64-apple-darwin)

在这里插入图片描述

步骤 2:初始化项目

这是与 pip 最大的区别:uv 从项目创建开始就介入管理。

# 创建一个新项目目录并初始化
uv init my-langchain-project
cd my-langchain-project

执行后,目录中会生成 pyproject.toml 文件——这是项目的"身份证",记录元数据和依赖。

步骤 3:为项目添加依赖

uv add 命令来安装包,而非 pip install。这条命令会自动做三件事:创建虚拟环境、安装库、并更新项目依赖文件。

# 添加 langchain 和 deepagents
uv add langchain deepagents

这条命令会自动完成三件事:

  1. 创建虚拟环境(项目根目录下的 .venv 文件夹);
  2. 安装指定库及其依赖;
  3. 更新 pyproject.tomluv.lock 文件。

你无需手动激活虚拟环境,uv 会全程自动管理。执行过程中,你会发现项目根目录下自动生成了一个 .venv 文件夹,这就是 uv 为这个项目专属创建的虚拟环境,你无需手动激活它。

步骤 4:运行代码

使用 uv run 来执行 Python 脚本。它会自动在项目的虚拟环境中运行,确保用的是项目自己的依赖。

# 假设你写了一个 test.py 文件
uv run python test.py

uv run 会自动在项目的虚拟环境中执行命令,确保使用项目专属的依赖版本。这是 uv 最方便的一点:你不需要记得手动激活或退出环境

步骤 5:查看和锁定依赖
uv tree

可查看清晰的依赖树。所有依赖被自动锁定在 uv.lock 文件中,记录了每个包的确切版本和哈希值,保证跨机器部署时的一致性。


四、验证效果:两种方案的流程对比

为了更直观地理解差异,以下是用表格总结的完整流程对比:

步骤 pip 经典流程 uv 现代流程
1. 创建环境 手动操作:conda create -n xxxpython -m venv .venv 自动完成:运行 uv init 或首次 uv add 时自动创建 .venv
2. 激活环境 必须手动:conda activate xxx(容易忘记,导致装错环境) 无需手动:uv run 命令自动在项目环境中执行
3. 安装库 pip install <库名> uv add <库名>
4. 记录依赖 需手动:pip freeze > requirements.txt(易遗漏,仅顶层依赖) 自动记录:自动更新 pyproject.tomluv.lock(完整依赖树+哈希锁定)
5. 运行代码 需先确认环境已激活,再 python script.py uv run python script.py,自动路由到正确环境
6. 环境复现 依赖 requirements.txt,但难以保证完全一致性 uv.lock 确保所有机器上的依赖完全一致

参考文献

  1. LangChain 官方文档
  2. conda 官方文档
  3. uv 官方文档
  4. Python Packaging User Guide
  5. Astral: uv - An extremely fast Python package installer and resolver
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐