Conda与Pip使用指南:核心原则与避坑技巧
摘要:本文档系统梳理了conda和pip的使用边界与最佳实践。核心原则是优先使用conda安装科学计算核心库和系统级依赖,用pip安装纯Python项目包。强调base环境应仅作为管理平台,避免安装项目依赖包。提供了详细的判断流程和风险提示,推荐创建独立项目环境并规范使用mamba工具。最后给出常用命令速查表和"三句话原则":conda管核心系统环境,pip管项目PyPI包;b
·
Conda与Pip使用指南:核心原则与避坑技巧
一、核心原则:conda vs pip 什么时候用?
| 判断维度 | conda(推荐) |
pip(推荐) |
|---|---|---|
包是否涉及 C/C++ 编译(如 numpy, pandas, pytorch) |
✅ 是 | ❌ 否 |
是否是 科学计算核心库(scipy, matplotlib, seaborn) |
✅ 是 | ❌ 否 |
| 是否是 纯 Python 包(无系统依赖) | ❌ 否 | ✅ 是 |
是否项目特定(如 flask, requests, selenium) |
❌ 否 | ✅ 是 |
是否为 多语言/系统级软件(R, JDK, CUDA) |
✅ 是 | ❌ 否 |
| 是否需要 环境隔离、复现 | ✅ 是 | ❌ 否 |
| 是否要安装 最新版本(非稳定) | ❌ 不推荐 | ✅ 是 |
✅ 总结一句话:
优先使用
conda安装核心依赖、系统库;使用pip安装项目包、纯 Python 工具。
二、base 环境的用途与最佳实践
1. base 是什么?
- Anaconda / Miniconda 默认创建的第一个环境。
- 包含
python,conda,pip,jupyter,ipython等开发工具。 - 不是用来装项目代码的,而是环境管理平台。
2. ✅ 建议安装到 base 的包
| 包名 | 说明 |
|---|---|
conda |
管理器本身 |
pip |
用于安装其他 Python 包 |
jupyterlab |
核心开发工具,启动 jupyter lab |
nb_conda_kernels |
使 Jupyter 可识别 conda 环境内核 |
ipython, ipykernel |
增强 Jupyter 交互功能 |
mamba(推荐) |
更快的 conda 替代工具 |
git, make, clang |
系统级开发工具 |
3. ❌ 不推荐安装到 base 的包
| 包名 | 原因 |
|---|---|
numpy, pandas, scipy, matplotlib |
核心库,不同项目需不同版本,极易冲突 |
pytorch, tensorflow |
依赖复杂(CUDA, MKL, BLAS),版本不兼容 |
flask, requests, selenium |
项目特定依赖,应独立部署 |
opencv, torchvision, pyside |
有 C++ 编译,版本对齐困难 |
| 个人私有库、中间件 | 项目专用,不应全局安装 |
✅ 原则:
base只装工具,不装项目依赖。
三、如何判断一个包该用 conda 还是 pip?
✅ 判断步骤(建议流程):
1. 该包是否是核心科学计算包?
- 是 → 用 conda 安装(推荐)
- 否 → 继续
2. 该包是否涉及 C/C++ 编译?
- 是 → 用 conda 安装(推荐)
- 否 → 继续
3. 该包是否是纯 Python,且在 PyPI 上?
- 是 → 用 pip 安装
- 否 → 检查 conda 是否支持
4. 搜索 conda 仓库:
- `conda search 包名` 或 `mamba search 包名`
- 若存在 → 用 `conda install` 安装
- 若不存在 → 用 `pip install`
5. 是否必须最新版本?
- 是 → `pip install --pre 包名`
- 否 → 优先用可用的 conda 版本
✅ 实用命令示例:
# 检查包是否在 conda 中
conda search numpy
mamba search numpy
# 检查包是否在 PyPI
pip show numpy
# 安装(先 conda,后 pip)
conda install numpy
pip install flask jupyterlab
四、混用 pip 和 conda 的风险
| 风险 | 原因 |
|---|---|
| 🟡 依赖冲突 | 如 numpy 用 conda 安装 1.23,pip 升级到 1.24,可能破坏 scipy |
| 🔴 版本混乱 | conda list 和 pip list 显示不一致,无法复现环境 |
| 🟡 环境不可复现 | 依赖链不完整,易错 |
| 🔴 程序崩溃 | 如 numpy.float64 属性缺失等常见错误 |
| 🟡 难以维护 | 不知道谁安装了什么包,排查困难 |
❗ 避免在同一个环境中混用,尤其是核心包!
五、最佳实践流程(推荐方案)
# 1. 创建独立项目环境(避免污染 base)
conda create -n myproject python=3.9
# 2. 激活环境
conda activate myproject
# 3. 安装核心依赖(用 conda)
conda install numpy scipy pandas matplotlib
# 4. 安装项目包(用 pip)
pip install flask requests jupyterlab
# 5. 安装特定依赖(可选)
pip install -r requirements.txt
# 6. 保存环境(可复现)
conda env export > environment.yml
✅ 进阶建议:
- 使用
mamba提升速度:conda install mamba -c conda-forge mamba install numpy - 使用
conda-forge通道(更活跃):conda install -c conda-forge 包名
六、常用包推荐安装方式
| 包名 | 推荐方式 | 原因 |
|---|---|---|
numpy, pandas, scipy, matplotlib |
conda |
编译复杂,conda 管理更好 |
seaborn, statsmodels, plotly |
conda 或 pip |
可用任一,但 conda 更稳定 |
pytorch, tensorflow |
conda(推荐) |
自动匹配 CPU/CUDA/版本 |
flask, fastapi, requests, selenium |
pip |
项目专用,PyPI 上更新快 |
jupyterlab, nbclassic, jupyter_contrib_nbextensions |
pip 或 conda |
以 pip 为主,conda 为辅 |
git, make, cmake |
conda |
系统工具包,conda 更可靠 |
pip, setuptools, wheel, ipython |
conda |
开发工具,应加入 base |
七、混用警告提示(记住)
| 做法 | 风险等级 | 建议 |
|---|---|---|
conda install numpy 后 pip install numpy |
🔴 极高 | ✅ 禁止!不要覆盖核心包 |
在 base 中安装 torch, pandas |
🔴 高 | ✅ 仅用于工具,不装项目依赖 |
在 conda 环境中 pip install 任意包 |
🟡 中 | ✅ 可行,但要控制 |
在 base 环境中 pip install 项目包 |
🟡 中 | ✅ 不推荐,易污染全局 |
使用 pip install 替代 conda 安装 pytorch |
🟡 中 | ✅ 仅限紧急情况(如变体安装) |
✅ 重要原则:
conda为“系统管理员”,pip为“临时工具”,不要让“临时工”乱动系统。
八、我的复盘清单(项目前快速检查)
✔️ 是否创建了独立环境?
✔️ 是否只用 conda 安装了 numpy, pandas, scipy?
✔️ 是否只在环境中用 pip 安装 flask、jupyterlab?
✔️ 是否避免了在 base 中安装项目依赖包?
✔️ 是否保存了 environment.yml?
✔️ 是否使用 conda list 和 pip list 检查版本是否一致?
九、附录:常用命令
# 环境管理
conda create -n envname python=3.9
conda activate envname
conda deactivate
conda env list
conda remove -n envname --all
# 包管理
conda install 包名
conda install -c conda-forge 包名
pip install 包名
pip list
conda list
# 导出/导入
conda env export > environment.yml
conda env create -f environment.yml
# 检查
conda search 包名
mamba search 包名
✅ 最终总结:三句话记住!
conda是管核心、管系统、管环境的,pip是管项目、管 Python、管 PyPI 的。base是工具区,不是项目区,只装必要开发工具,不装数据包!- 先查
conda search,再用pip,混用要小心,版本要对齐!
更多推荐



所有评论(0)