学AI,懂这些Python就够了(五):venv·conda·pip —— 打造AI开发的可复现环境
系列:「学AI,懂这些Python就够了」—— 面向AI智能体开发者的Python速成指南
标签:
Python虚拟环境venvcondapip环境管理难度:⭐⭐☆☆☆
前言
“在我电脑上能跑啊”——这大概是软件开发者最怕听到的一句话。
AI开发的环境问题尤其突出:Python版本、CUDA版本、各类库的互相依赖……一个环境配一天的情况并不罕见。更糟的是,你把代码发给同事,他可能完全跑不起来。
这就是环境管理的重要性:让AI开发环境从"碰运气"变成"可复现"。
本文是 「学AI,懂这些Python就够了」 系列的收官篇,带你建立专业的Python环境管理能力。
1. 为什么要用虚拟环境
1.1 没有虚拟环境的痛苦
假设你有两个项目:
- 项目A(聊天机器人):依赖
langchain==0.1.0 - 项目B(数据分析):依赖
langchain==0.2.0
如果都安装在全局Python环境中,只能存在一个版本——另一个项目就会报错。
1.2 虚拟环境解决的问题
┌─────────────────────────────────────────────┐
│ 你的电脑 │
│ │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ 项目A 的 │ │ 项目B 的 │ │
│ │ 虚拟环境 │ │ 虚拟环境 │ │
│ │ │ │ │ │
│ │ langchain │ │ langchain │ │
│ │ 0.1.0 │ │ 0.2.0 │ │
│ │ openai 1.12.0 │ │ openai 1.30.0 │ │
│ │ python 3.10 │ │ python 3.11 │ │
│ └───────────────┘ └───────────────┘ │
│ │
│ 两个项目完全隔离,互不影响! │
└─────────────────────────────────────────────┘
核心原则:每个项目一个独立环境,环境之间完全隔离。
2. venv:Python内置的虚拟环境方案
2.1 创建、激活、退出虚拟环境
# ========= 创建虚拟环境 =========
# 在项目根目录下执行
python -m venv .venv
# 参数说明:
# python -m venv 调用venv模块
# .venv 环境文件夹名字(.venv是社区约定,点号开头表示隐藏文件夹)
# 也可以指定Python版本和选项
python -m venv .venv --python=python3.11 --clear
# ========= 激活虚拟环境 =========
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# Windows CMD
.\.venv\Scripts\activate.bat
# Linux / macOS
source .venv/bin/activate
# 激活成功后,命令行前面会出现环境名提示
(.venv) PS D:\project\my-agent>
# ========= 确认当前环境 =========
# 查看当前Python路径
where python # Windows
which python # Linux/macOS
# 确认当前Python指向虚拟环境
python -c "import sys; print(sys.prefix)"
# 应该输出类似 D:\project\my-agent\.venv 的路径
# ========= 退出虚拟环境 =========
deactivate
2.2 完整工作流程
# 场景1:从头开始一个新项目
mkdir my-ai-agent
cd my-ai-agent
python -m venv .venv # 1. 创建环境
.\.venv\Scripts\Activate.ps1 # 2. 激活环境
pip install langchain openai httpx # 3. 安装依赖
pip freeze > requirements.txt # 4. 锁定依赖
# ... 开始写代码 ...
# 场景2:克隆一个已有项目
git clone https://github.com/xxx/my-ai-agent.git
cd my-ai-agent
python -m venv .venv # 1. 创建环境
.\.venv\Scripts\Activate.ps1 # 2. 激活环境
pip install -r requirements.txt # 3. 安装项目依赖
# ... 开始开发 ...
2.3 .gitignore 配置
# Python虚拟环境
.venv/
venv/
env/
ENV/
# Python缓存
__pycache__/
*.py[cod]
*.egg-info/
# IDE
.vscode/
.idea/
# 环境变量(含API Key等敏感信息)
.env
*.env.local
2.4 VS Code / PyCharm 集成
VS Code 配置:
- 打开项目后按
Ctrl+Shift+P - 输入 “Python: Select Interpreter”
- 选择
.venv\Scripts\python.exe - VS Code 会自动在终端中激活虚拟环境
PyCharm 配置:
File → Settings → Project → Python Interpreter- 点击齿轮图标 →
Add - 选择
Existing environment - 指向
.venv\Scripts\python.exe
2.5 常见问题
# 问题1:PowerShell 无法运行激活脚本
# 错误信息:无法加载文件,因为在此系统上禁止运行脚本
# 解决方案:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# 问题2:pip 版本过旧
# 解决方案:
python -m pip install --upgrade pip
# 问题3:移动了项目文件夹,虚拟环境失效
# 解决方案:删除旧的 .venv,重新创建
rm -rf .venv
python -m venv .venv
pip install -r requirements.txt
3. conda:数据科学家的环境选择
3.1 Miniconda vs Anaconda
| 特性 | Miniconda(推荐) | Anaconda |
|---|---|---|
| 安装包大小 | ~60MB | ~3GB |
| 预装包 | 仅conda + python | 7500+ 包 |
| 启动速度 | 快 | 慢 |
| 适用场景 | 有经验开发者 | 初学者 |
💡 推荐安装 Miniconda —— 需要什么装什么,不要预装一堆用不上的。
3.2 环境管理
# ========= 创建环境 =========
# 创建指定Python版本的环境
conda create -n myagent python=3.10
# 创建环境并同时安装包
conda create -n myagent python=3.10 numpy pandas jupyter
# 克隆已有环境
conda create -n myagent_clone --clone myagent
# ========= 环境操作 =========
# 列出所有环境
conda env list
# 激活环境
conda activate myagent
# 退出环境
conda deactivate
# 删除环境
conda env remove -n myagent
# 查看当前环境的包
conda list
3.3 环境导出与恢复
# ========= 导出环境 =========
# 方式1:导出为 environment.yml(推荐,跨平台)
conda env export > environment.yml
# 方式2:只导出显式安装的包(更简洁)
conda env export --from-history > environment.yml
# 方式3:同时导出pip包
conda env export > environment_full.yml
# ========= 从文件恢复环境 =========
conda env create -f environment.yml
# ========= 只导出pip包列表 =========
pip freeze > requirements.txt
environment.yml 示例:
name: myagent
channels:
- conda-forge
- defaults
dependencies:
- python=3.10
- pip
- numpy
- pandas
- pip:
- langchain==0.1.0
- openai==1.12.0
- httpx==0.27.0
- pydantic==2.5.0
3.4 conda + pip 混合使用
这是数据科学和AI项目中的常见模式:
# 最佳实践:conda管理环境+Python版本,pip管理Python包
# 1. 用conda创建环境和安装非Python依赖
conda create -n myagent python=3.10
conda activate myagent
# 2. 先用conda安装难以用pip安装的包
conda install numpy pandas scipy # conda处理C扩展包更好
# 3. 再用pip安装纯Python包
pip install langchain openai httpx pydantic
# 4. 导出时分开记录
conda env export --from-history > environment.yml
pip freeze > requirements.txt
⚠️ 注意事项:先conda后pip!先用conda安装所有能装的包,再用pip装剩下的。反过来可能导致依赖冲突。
4. pip:包管理的核心技能
4.1 基本包管理
# ========= 安装包 =========
pip install package_name # 安装最新版
pip install package_name==1.2.3 # 安装指定版本
pip install "package>=1.0,<2.0" # 安装版本范围
pip install -r requirements.txt # 从文件批量安装
# ========= 查看包 =========
pip list # 列出所有已安装的包
pip list --outdated # 列出可更新的包
pip show package_name # 查看特定包的详细信息(版本、依赖、位置等)
# ========= 更新包 =========
pip install --upgrade package_name # 更新单个包
pip install --upgrade pip # 更新pip自身
# ========= 卸载包 =========
pip uninstall package_name # 卸载包
# ========= 检查依赖 =========
pip check # 检查是否存在依赖冲突
4.2 requirements.txt 规范
# ========= 推荐的requirements.txt结构 =========
# --- 核心依赖(锁定版本) ---
langchain==0.1.0
openai==1.12.0
httpx==0.27.0
pydantic==2.5.0
# --- 工具依赖 ---
python-dotenv==1.0.0 # 环境变量管理
tiktoken==0.5.0 # Token计数
rich==13.7.0 # 美化终端输出
# --- 开发依赖(放在 requirements-dev.txt) ---
# pytest==7.4.0
# black==23.0.0
# ruff==0.1.0
分离生产和开发依赖:
# requirements.txt —— 生产环境
langchain==0.1.0
openai==1.12.0
httpx==0.27.0
# requirements-dev.txt —— 开发环境
-r requirements.txt # 先引入生产依赖
pytest==7.4.0 # 测试框架
black==23.0.0 # 代码格式化
ruff==0.1.0 # 代码检查
pre-commit==3.6.0 # Git提交前检查
4.3 pip 配置优化
# ========= 设置国内镜像源(大幅提升下载速度) =========
# 临时使用(单次)
pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple
# 永久设置(推荐)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
# 查看当前配置
pip config list
国内常用镜像源:
| 镜像源 | URL |
|---|---|
| 清华大学 | https://pypi.tuna.tsinghua.edu.cn/simple |
| 阿里云 | https://mirrors.aliyun.com/pypi/simple |
| 中科大 | https://pypi.mirrors.ustc.edu.cn/simple |
| 豆瓣 | https://pypi.douban.com/simple |
4.4 高级依赖管理工具
# pip-tools —— 锁定依赖树的精确版本
pip install pip-tools
# 步骤1:编写 requirements.in(只写直接依赖,不写版本号)
# langchain
# openai
# httpx
# 步骤2:生成精确锁定的 requirements.txt
pip-compile requirements.in
# 输出 requirements.txt,包含所有传递依赖的精确版本
# 步骤3:同步环境到锁定文件
pip-sync requirements.txt
# 安装requirements.txt中的包,卸载不在其中的包
# pipdeptree —— 查看依赖树
pip install pipdeptree
pipdeptree # 显示依赖树
pipdeptree -p langchain # 只看某个包的依赖树
pipdeptree --reverse -p openai # 查看哪些包依赖了openai
# pip-audit —— 安全漏洞扫描
pip install pip-audit
pip-audit # 检查已知的安全漏洞
4.5 常见问题排查
# 问题1:安装权限不足
# 解决方案:使用 --user 或虚拟环境
pip install --user package_name
# 更好的方案:始终在虚拟环境中操作
# 问题2:安装超时
# 解决方案:配置镜像源 + 增加超时时间
pip install package -i https://pypi.tuna.tsinghua.edu.cn/simple --timeout=120
# 问题3:依赖冲突
# 排查步骤:
pip check # 1. 检查冲突
pip install pipdeptree && pipdeptree # 2. 查看依赖树
# 3. 创建新的虚拟环境重新安装
# 问题4:SSL证书错误
# 解决方案:配置受信主机
pip install package --trusted-host pypi.org --trusted-host files.pythonhosted.org
5. 工具选型指南
5.1 场景推荐
| 场景 | 推荐方案 | 原因 |
|---|---|---|
| 简单Python项目 | venv + pip |
轻量、内置、标准 |
| 数据科学/AI项目 | conda + pip |
非Python依赖、多Python版本 |
| Web应用开发 | venv + pip |
简单直接 |
| 团队协作项目 | venv/conda + pip-tools |
依赖锁定可复现 |
| 服务器部署 | venv + pip |
资源占用小 |
| 需要特定CUDA版本 | conda |
conda管理CUDA方便 |
5.2 功能对比
| 功能 | venv | conda | pip |
|---|---|---|---|
| 创建虚拟环境 | ✅ | ✅ | ❌ |
| 管理Python版本 | ❌ | ✅ | ❌ |
| 安装Python包 | ❌ | ✅ | ✅ |
| 安装非Python依赖 | ❌ | ✅ | ❌ |
| 依赖解析能力 | - | 强 | 弱 |
| 内置 | ✅ | ❌需安装 | ✅ |
| 速度 | 快 | 慢(可用mamba加速) | 快 |
5.3 决策流程图
你的项目需要什么?
│
├── 需要特定Python版本? → YES → 用 conda
│
├── 需要CUDA/cuDNN等非Python依赖? → YES → 用 conda
│
├── 纯Python项目? → 用 venv + pip
│
├── 团队协作,需要精确复现? → venv + pip-tools
│
└── 高性能服务器部署? → venv + pip(最小资源占用)
6. 实战:团队协作的环境管理方案
6.1 推荐的AI项目初始化步骤
# ====== 第1步:创建项目并初始化环境 ======
mkdir my-ai-agent
cd my-ai-agent
python -m venv .venv
.\.venv\Scripts\Activate.ps1 # Windows
# source .venv/bin/activate # Linux/macOS
# ====== 第2步:升级pip并安装基础工具 ======
python -m pip install --upgrade pip
pip install pip-tools
# ====== 第3步:编写 requirements.in ======
requirements.in:
# 直接依赖(不锁版本号,不写传递依赖)
langchain
openai
httpx
pydantic
python-dotenv
# ====== 第4步:生成锁定文件 ======
pip-compile requirements.in
# 生成 requirements.txt,包含所有精确版本
# ====== 第5步:安装依赖 ======
pip-sync requirements.txt
# ====== 第6步:编写 .gitignore ======
.gitignore:
# 环境
.venv/
venv/
__pycache__/
*.pyc
# 环境变量(含密钥)
.env
*.env.local
# IDE
.vscode/
.idea/
# 项目特定
*.log
agent_data/
# ====== 第7步:创建项目结构 ======
mkdir -p src/agent src/tools tests config data logs
# ====== 第8步:初始化Git(可选) ======
git init
git add .
git commit -m "初始化项目环境"
6.2 新成员入职流程
# 新成员只需3步即可开始开发:
git clone https://github.com/xxx/my-ai-agent.git # 1. 克隆
cd my-ai-agent
python -m venv .venv # 2. 创建环境
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt # 3. 安装依赖
# 完成!可以开始写代码了
6.3 依赖更新流程
# 定期更新依赖(每月一次或安全更新时)
# 1. 激活环境
.\.venv\Scripts\Activate.ps1
# 2. 更新 requirements.in(修改版本约束)
# 3. 重新编译
pip-compile --upgrade requirements.in
# 4. 同步安装
pip-sync requirements.txt
# 5. 运行测试确保兼容
pytest
# 6. 提交更新
git add requirements.in requirements.txt
git commit -m "更新依赖版本"
# 7. 检查安全漏洞
pip-audit
7. 总结
本篇核心知识
Python环境管理三剑客
├── venv
│ ├── python -m venv .venv:创建环境
│ ├── activate / deactivate:激活/退出
│ └── 每个项目一个 .venv,用 .gitignore 排除
├── conda
│ ├── conda create -n name python=3.10:创建环境
│ ├── conda activate name:激活
│ ├── environment.yml:环境导出与恢复
│ └── conda + pip 混合使用:conda先,pip后
└── pip
├── pip install -r requirements.txt:批量安装
├── pip freeze > requirements.txt:导出依赖
├── 国内镜像源:大幅提升下载速度
├── pip-tools:精确锁定依赖版本
└── pip-audit:安全漏洞扫描
黄金法则
- 每个项目一个虚拟环境 —— 永远不要在全局Python中安装项目依赖
.venv加入.gitignore—— 不要把虚拟环境提交到仓库- 锁定依赖版本 —— 用
pip freeze或pip-tools生成精确版本 - 先conda后pip —— 非Python依赖用conda,Python包用pip
- 配置国内镜像 —— 安装速度从"泡杯咖啡"变成"眨个眼"
- 定期安全检查 ——
pip-audit扫描已知漏洞
系列回顾
恭喜你完成了 「学AI,懂这些Python就够了」 全系列5篇文章的学习!让我们回顾一下你掌握的技能树:
学AI,懂这些Python就够了
│
├── 第1篇:Python核心语法
│ └── 变量·数据类型·控制流·函数·类
│
├── 第2篇:异步编程
│ └── async/await·协程·任务管理·异步HTTP
│
├── 第3篇:四大核心库
│ └── requests·httpx·pydantic·dataclasses
│
├── 第4篇:数据持久化
│ └── JSON·YAML·文件读写·对话存储
│
└── 第5篇:环境管理 ← 你在这里
└── venv·conda·pip·依赖锁定
有了这些Python基础,你已经具备了进入AI智能体开发世界的门票。接下来你可以:
- 🚀 学习 LangChain / LlamaIndex 等智能体开发框架
- 🧠 深入学习 Prompt Engineering 和 Function Calling
- 🏗️ 动手构建你的第一个 AI Agent:从一个简单的聊天机器人开始
- 📚 阅读这个系列对应的完整学习计划,进入第二阶段
本文是「学AI,懂这些Python就够了」系列的收官篇。Python环境管理看似枯燥,实则是专业和业余的分水岭——一个干净、可复现的环境,能让你和你的团队专注于真正重要的事:构建智能体。
🎉 该系列完结,感谢阅读!祝你在AI智能体开发的道路上越走越远!接下来开始我们的第二阶段,吃透Transformer
更多推荐

所有评论(0)