
文章目录
1. 课前导读
1.1 本节课学习目标
- 理解Anaconda在深度学习开发中的作用:环境隔离、依赖管理、跨平台一致性。
- 掌握Conda的核心操作:创建、激活、退出、删除虚拟环境。
- 学会配置国内镜像源(清华、中科大等)加速包下载,解决网络超时问题。
- 熟练使用
conda install与pip install的适用场景,避免混合安装带来的依赖冲突。 - 掌握环境导出(
environment.yml/requirements.txt)与重建,实现项目可复现性。 - 能够在一个机器上同时维护多个TensorFlow版本(如2.13、2.10)并进行切换测试。
1.2 知识重难点
| 类别 | 内容 |
|---|---|
| 重点 | Conda虚拟环境的完整生命周期管理;镜像源配置与优先级;环境导出与克隆 |
| 难点 | Conda与Pip混合使用时的依赖解析冲突;Conda底层二进制依赖与PyPI包的兼容性;environment.yml中的channels与pip字段协同工作 |
| 易混淆点 | conda list vs pip list;base环境与自定义环境的区别;conda env export vs conda env export --no-builds |
1.3 学习前置条件
- 已完成Python 3.9+安装(第1课),或直接使用本课安装的Anaconda。
- 拥有管理员/普通用户权限安装软件。
- 了解基本的命令行操作(
cd,ls/dir,path概念)。
1.4 学完可掌握能力
- 能够为不同项目(例如TensorFlow 2.x旧版本测试、PyTorch项目、JAX实验)创建独立的Conda环境,互不干扰。
- 在任何网络受限环境下通过镜像源快速安装深度学习依赖库。
- 将项目环境配置导出,供队友或生产环境一键复现。
- 解决常见的
ResolvePackageNotFound、Solving environment: failed等环境问题。 - 在同一个操作系统上管理CPU与GPU版本的TensorFlow环境,按需激活。
1.5 行业应用场景
- 团队协作:通过
environment.yml统一开发环境,避免“在我电脑上能跑”的问题。 - 模型复现:论文源码常提供环境配置文件,一键复现实验环境。
- 多框架测试:同一台服务器上需要同时支持TensorFlow、PyTorch、MXNet时,环境隔离是基础。
- CI/CD流水线:自动化测试中创建临时环境运行单元测试,完成后销毁。
- 云端Notebook:如Google Colab、阿里云DSW等本质也是预置了Conda环境管理。
2. 核心理论精讲
2.1 为什么需要虚拟环境?
Python项目的依赖问题普遍存在:
- 项目A需要TensorFlow 2.13,项目B需要TensorFlow 2.10且不兼容新版API。
- 全局安装
numpy版本为1.21,但某个库要求≥1.24。 - 不同操作系统上二进制包(如
pyarrow、opencv)预编译版本不同。
虚拟环境为每个项目创建独立的Python解释器及包目录,隔离依赖。Anaconda在此基础上额外提供了:
- Conda包管理器:不仅管理Python包,还可以安装非Python的二进制依赖(如CUDA工具包、OpenMP、HDF5)。
- 预编译的科学计算库:MKL(Intel数学核心库)优化,使得NumPy、SciPy等开箱即快。
- 跨平台一致性:Windows/Linux/macOS上命令统一。
2.2 Conda vs. Pip vs. Virtualenv
| 工具 | 环境隔离 | 管理非Python库 | 预编译二进制 | 依赖解析 | 官方源速度(国内) |
|---|---|---|---|---|---|
| Conda | ✅ (独立解释器) | ✅ | ✅ | 较强,但有时较慢 | 较慢(需镜像) |
| Pip + Virtualenv | ✅ (独立解释器) | ❌ 只能Python包 | 部分( wheels) | 较弱,可能冲突 | 可配置镜像 |
| Pipenv | ✅ | ❌ | ❌ | 锁文件机制 | 依赖pypi源 |
| Poetry | ✅ | ❌ | ❌ | 较完善 | 依赖pypi源 |
在实际深度学习中,Conda管理环境,Conda安装可用的预编译包(如cudatoolkit、cudnn),剩余PyPI专属包用pip安装是业界主流实践。
2.3 Conda 环境隔离底层原理
Conda在envs目录下为每个环境创建独立文件夹,内部包含:
bin/(Linux/macOS) 或Scripts/(Windows):可执行文件及Python解释器软链接。lib/pythonX.X/site-packages/:该环境的Python包。conda-meta/:记录已安装包的元数据。
当执行conda activate env_name时,Conda修改环境变量PATH,将该环境的bin目录置于系统路径最前,同时设置CONDA_DEFAULT_ENV、CONDA_PREFIX等变量,从而让后续python、pip命令指向该环境。
2.4 镜像源配置逻辑
默认Conda官方源https://repo.anaconda.com/pkgs/位于国外,国内访问极慢且易断连。镜像站(如清华TUNA)同步官方源,提供国内高速通道。配置镜像源后,Conda会优先从镜像索引,降低超时概率。
配置涉及三个层级:
- 系统级:
/etc/conda/.condarc(需管理员权限) - 用户级:
~/.condarc(推荐,当前用户生效) - 环境级:环境激活时的环境变量覆盖。
常用镜像源:
- 清华:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/ - 中科大:
https://mirrors.ustc.edu.cn/anaconda/ - 阿里云:
https://mirrors.aliyun.com/anaconda/
注意事项:镜像站可能不完全同步所有包,若遇到404可临时恢复默认源或换源。
2.5 环境导出与可复现性
conda env export > environment.yml:导出包含所有包(包括通过pip安装的)的精确版本和构建哈希。适合完全复现,但跨平台兼容性差(不同OS的构建号不同)。conda env export --no-builds > environment.yml:只记录包名和版本,去掉构建号,跨平台友好,但可能引入细微差异。pip freeze > requirements.txt:仅导出pip安装的包,常用于配合Conda环境使用。
最佳实践:项目中同时维护environment.yml(conda包,含渠道)和requirements.txt(纯pip包),或使用environment.yml中的pip字段统一管理。
3. 环境搭建与工具配置
3.1 下载与安装Anaconda
Windows:
- 访问官网 https://www.anaconda.com/download 或清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载最新版Anaconda3(Python 3.9/3.10版本)。
- 运行
.exe安装程序。- 勾选“Add Anaconda3 to my PATH environment variable”(建议,便于命令行使用)。
- 安装路径建议默认(
C:\Users\<用户名>\anaconda3),避免权限问题。
- 安装完成后,打开“Anaconda Prompt (Anaconda3)”测试。
macOS:
# 下载图形化安装包 .pkg 或使用命令行安装
curl -O https://repo.anaconda.com/archive/Anaconda3-2023.09-0-MacOSX-x86_64.sh
bash Anaconda3-2023.09-0-MacOSX-x86_64.sh
# 按提示确认license、安装路径(默认~/anaconda3),最后选择yes将conda加入PATH
Linux (Ubuntu):
wget https://repo.anaconda.com/archive/Anaconda3-2023.09-0-Linux-x86_64.sh
bash Anaconda3-2023.09-0-Linux-x86_64.sh
# 交互式安装,同意条款,默认安装到~/anaconda3
source ~/.bashrc # 或重新登录终端
3.2 验证安装
conda --version # 应输出 conda 23.x.x
conda info # 显示当前配置、默认环境路径等
which python # 应指向anaconda3/bin/python (macOS/Linux) 或 where python (Windows)
3.3 配置镜像源(清华源为例)
打开终端或Anaconda Prompt,执行:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
查看配置:
conda config --show-sources
若需删除某个channel:
conda config --remove channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
注意:对于conda-forge等第三方渠道,同样可添加镜像站对应的渠道:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
3.4 更新Conda自身与基础环境
conda update -n base conda # 更新conda管理器
conda update --all # 更新base环境中所有包(慎用,可能破坏兼容性)
建议:保持conda版本较新,但不轻易更新base环境的包;依赖包在项目虚拟环境中安装。
4. 代码实战教学
本节所有命令均在终端/Anaconda Prompt中执行,附带详细注释。
4.1 创建与管理虚拟环境
4.1.1 创建新环境(指定Python版本)
# 创建一个名为 tf2.13 的环境,并安装 Python 3.9
conda create -n tf2.13 python=3.9
# 确认创建,输入 y 继续
# 环境将保存在 anaconda3/envs/tf2.13
可同时安装多个初始包:
conda create -n tf210 python=3.8 numpy pandas matplotlib
4.1.2 激活与退出环境
# 激活环境
conda activate tf2.13
# 激活后,命令行提示符前会显示 (tf2.13)
# 查看当前Python路径
which python # 应指向 envs/tf2.13/bin/python
# 退出环境,回到base
conda deactivate
4.1.3 列出所有环境
conda env list
# 或
conda info --envs
输出示例:
# conda environments:
#
base * /home/user/anaconda3
tf2.13 /home/user/anaconda3/envs/tf2.13
tf210 /home/user/anaconda3/envs/tf210
4.1.4 删除环境
conda remove -n tf210 --all
# 或
conda env remove -n tf210
4.1.5 克隆环境
# 将 tf2.13 克隆为 tf2.13-backup
conda create -n tf2.13-backup --clone tf2.13
4.2 在环境中安装包
4.2.1 使用 conda 安装
# 激活目标环境
conda activate tf2.13
# 安装 TensorFlow CPU 版本(从conda-forge渠道)
conda install -c conda-forge tensorflow=2.13.0
# 安装 GPU 版本(conda会自动拉取匹配的cudatoolkit、cudnn)
conda install -c conda-forge tensorflow-gpu=2.13.0 # 注意:2.10后 tensorflow-gpu 包已废弃,建议使用 tensorflow 并指定GPU依赖
# 实际上 TensorFlow 2.13 的 conda 包已支持GPU检测,只需安装 tensorflow 再手动安装cudatoolkit
conda install -c conda-forge tensorflow=2.13.0 cudatoolkit=11.8 cudnn=8.6
4.2.2 使用 pip 安装(在conda环境中)
# 确保已激活conda环境,此时pip指向该环境的pip
pip install tensorflow==2.13.0
注意:混合使用时,应优先通过conda安装可用的包,剩余再用pip。若先pip后conda,conda可能覆盖pip安装的包导致不一致。
4.2.3 批量安装 requirements.txt
pip install -r requirements.txt
4.3 环境导出与重建
4.3.1 导出完整环境(含构建哈希)
conda activate tf2.13
conda env export > environment_full.yml
生成的environment_full.yml片段示例:
name: tf2.13
channels:
- conda-forge
- defaults
dependencies:
- python=3.9.16
- numpy=1.24.3=py39h5d4884f_0
- pip:
- tensorflow==2.13.0
4.3.2 导出跨平台友好环境(无构建号)
conda env export --no-builds > environment.yml
4.3.3 从 yml 文件重建环境
conda env create -f environment.yml
如果只想更新现有环境:
conda env update -f environment.yml -n tf2.13
4.3.4 使用 requirements.txt 配合 conda
先创建空环境,然后:
conda activate myenv
pip install -r requirements.txt
但这种方式不能记录conda包。推荐做法:将pip依赖写入environment.yml的pip字段,实现单文件管理。
4.4 镜像源的高级配置
4.4.1 优先级设置
Conda channels 有优先级顺序(--add时越早越靠前)。可以通过conda config --prepend channels或--append调整。
# 将 conda-forge 设为最高优先级
conda config --prepend channels conda-forge
4.4.2 禁用默认源
如果完全使用镜像,可禁用defaults减少索引请求:
conda config --remove channels defaults
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
4.4.3 每个环境单独配置源
Conda 支持在环境目录下放置.condarc文件(例如/envs/tf2.13/.condarc)仅对该环境生效。优先级:环境级 > 用户级 > 系统级。
4.5 包缓存管理
Conda 默认将下载的包缓存到pkgs/目录,重复安装时无需下载。查看缓存位置:
conda info | grep "package cache"
清理缓存释放空间:
conda clean --all # 删除所有缓存的包、索引缓存、未使用的包
5. 案例实操演练
案例:在同一台机器上搭建并管理三个独立环境,分别用于TensorFlow 2.13 (CPU)、TensorFlow 2.10 (GPU) 和PyTorch 2.0,并演示环境切换与依赖导出。
5.1 需求
- 环境A:
tf2.13-cpu,用于快速原型验证,不需要GPU。 - 环境B:
tf2.10-gpu,需要CUDA 11.2 + cuDNN 8.1,旧项目依赖。 - 环境C:
pytorch20,PyTorch 2.0 with CUDA 11.7。
5.2 步骤
5.2.1 创建环境A
conda create -n tf2.13-cpu python=3.9
conda activate tf2.13-cpu
pip install tensorflow==2.13.0
# 验证
python -c "import tensorflow as tf; print(tf.__version__)"
5.2.2 创建环境B(GPU版本,旧版TensorFlow)
conda create -n tf2.10-gpu python=3.8
conda activate tf2.10-gpu
# 安装cudatoolkit和cudnn(匹配CUDA 11.2)
conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1
# 安装TensorFlow 2.10
pip install tensorflow==2.10.0
# 验证GPU可用
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
5.2.3 创建环境C(PyTorch)
conda create -n pytorch20 python=3.9
conda activate pytorch20
# 使用PyTorch官网提供的conda命令(CUDA 11.7)
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
# 验证
python -c "import torch; print(torch.cuda.is_available())"
5.2.4 导出环境A供团队复现
conda activate tf2.13-cpu
conda env export --no-builds > tf2.13-cpu_env.yml
tf2.13-cpu_env.yml内容:
name: tf2.13-cpu
channels:
- defaults
- conda-forge
dependencies:
- python=3.9
- pip
- pip:
- tensorflow==2.13.0
队友可通过以下命令复现:
conda env create -f tf2.13-cpu_env.yml
5.2.5 环境切换测试
编写一个简单脚本check_env.py:
import sys
import platform
print(f"Python: {sys.version}")
print(f"Platform: {platform.platform()}")
try:
import tensorflow as tf
print(f"TensorFlow: {tf.__version__}")
print(f"GPU devices: {tf.config.list_physical_devices('GPU')}")
except ImportError:
print("TensorFlow not installed")
在三个环境中依次运行:
conda activate tf2.13-cpu
python check_env.py
conda activate tf2.10-gpu
python check_env.py
conda activate pytorch20
python check_env.py
观察输出差异,验证环境隔离性。
5.3 镜像源配置对安装速度的影响实验
对比场景:未配置镜像源 vs 配置清华源,安装numpy和pandas。
# 临时关闭镜像源(备份.condarc)
mv ~/.condarc ~/.condarc.bak
time conda create -n test_default python=3.9 numpy pandas -y
# 恢复镜像源
mv ~/.condarc.bak ~/.condarc
time conda create -n test_mirror python=3.9 numpy pandas -y
一般镜像源速度可提升5~10倍。
6. 常见坑点与排错总结
6.1 环境激活失败
-
坑1:
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'。- 原因:未初始化conda的shell功能(多见于Linux/Mac使用
/bin/sh而非bash/zsh)。 - 解决:执行
conda init,然后重启终端。或使用source activate env_name(老式)。
- 原因:未初始化conda的shell功能(多见于Linux/Mac使用
-
坑2:Windows下
conda activate无效,提示无此命令。- 原因:未将Anaconda的Scripts目录加入PATH,或使用了普通cmd而非Anaconda Prompt。
- 解决:使用“Anaconda Prompt”快捷方式,或手动执行
C:\Users\<user>\anaconda3\Scripts\activate。
6.2 安装包时Solving environment长时间卡住
-
坑3:
Solving environment: failed with initial frozen solve. Retrying with flexible solve.无限循环。- 原因:conda依赖解析器尝试了大量组合,尤其当混合conda和pip包后环境复杂。
- 解决:
- 使用
conda install -c conda-forge <package> --solver=libmamba(安装mamba提升速度)。 - 或直接换用
mamba工具:conda install mamba -n base -c conda-forge,然后mamba install ...。 - 优先创建新环境,不要试图在已有复杂环境中解决冲突。
- 使用
-
坑4:
HTTP 404错误。- 原因:镜像站未同步该包或版本。
- 解决:临时移除镜像源:
conda config --remove-key channels,安装后再恢复。
6.3 混合使用conda与pip导致冲突
- 坑5:用pip安装了包A,然后用conda安装了依赖A的包B,导致A运行时找不到动态链接库。
- 原因:conda安装的包可能会降级或替换pip安装的包,甚至改变Python路径。
- 最佳实践:
- 先conda安装所有能装的,再用pip安装剩余包。
- 使用
conda create --use-local等策略,但更推荐在environment.yml中明确区分。 - 运行
conda list查看包来源(pypi标记为pip安装)。
6.4 环境导出与重建错误
-
坑6:
ResolvePackageNotFound错误在重建环境时。- 原因:导出的yml中包含了特定平台的构建包(如
py39h5d4884f_0),在另一平台不存在。 - 解决:使用
--no-builds导出,或手动删除yml中依赖项的=xxx之后的构建字符串。
- 原因:导出的yml中包含了特定平台的构建包(如
-
坑7:
conda env create时提示found conflicts。- 原因:指定的python版本与其他包冲突。
- 解决:在yml中明确指定
python=3.9,或尝试放宽版本约束。
6.5 磁盘空间与缓存
- 坑8:Conda占用大量磁盘空间(几十GB)。
- 原因:
pkgs/缓存了所有历史下载的包,环境删除后不会自动清理。 - 解决:定期执行
conda clean --all,或设置conda config --set auto_clean true。
- 原因:
7. 知识点总结 + 课后作业
7.1 核心知识点梳理
- Anaconda作用:提供预编译的科学计算环境,简化包管理,支持虚拟环境隔离。
- 环境管理命令:
create,activate,deactivate,remove,clone,env list。 - 镜像源配置:
.condarc文件,conda config --add channels,show_channel_urls。 - 安装包方式:
conda install(推荐二进制依赖) 和pip install(PyPI专有包) 合理分工。 - 环境导出:
conda env export生成 yml,--no-builds提高跨平台性。 - 最佳实践:每个项目独立环境;优先conda再pip;维护环境文件可复现。
7.2 基础作业
- 在自己的机器上安装Anaconda,配置清华镜像源,创建一个名为
tf_test的环境,Python版本3.9,并安装jupyter和matplotlib。 - 导出该环境为
tf_test.yml,然后删除环境,再通过yml文件重建,确认jupyter命令可用。 - 在
tf_test环境中分别使用conda list和pip list,观察输出差异。
7.3 进阶实操作业
任务:构建一个复现论文环境
从GitHub上选择一个带有environment.yml或requirements.txt的深度学习项目(例如经典DCGAN实现)。完成以下操作:
- 使用
conda env create -f environment.yml创建环境。如果失败,分析原因并手动修复(例如修改Python版本或更换镜像源)。 - 在环境内成功运行项目代码,确保无导入错误。
- 将修复后的
environment.yml文件重新导出,并添加注释说明修改点。
7.4 思考拓展题
- Conda的
environment.yml中的channels字段顺序对依赖解析有何影响?结合conda config --show解释优先级作用。 - 为什么建议在深度学习中优先使用
conda安装cudatoolkit和cudnn而不是手动安装系统级CUDA?它们如何协同工作? - 设计一个脚本,可以自动创建新环境、激活、安装给定列表的包(通过参数传入),并执行一个测试脚本,最后输出环境信息。要求使用
argparse模块,并支持通过--use-mirror切换镜像源。
下一课预告:TensorFlow 2.x极简安装——我们将深入讲解在不同操作系统上安装TensorFlow的完整流程,包括CPU/GPU版本的选型、CUDA与cuDNN的手动配置、环境校验以及第一个深度学习模型的前向传播测试。
🔗《TensorFlow2.x: 深度学习入门到高阶实战教程》系列课程导航
第一部分:基础入门(1-10 课)
第二部分:神经网络核心(11-25 课)
第三部分:进阶网络与框架高阶(26-40 课)
第四部分:企业实战与项目落地(41-50 课)
🌟 感谢您耐心阅读到这里!
💡 如果本文对您有所启发欢迎:
👍 点赞📌 收藏 📤 分享给更多需要的伙伴。
🗣️ 期待在评论区看到您的想法, 共同进步。
🔔 关注我,持续获取更多干货内容~
🤗 我们下篇文章见~

493

被折叠的 条评论
为什么被折叠?



