当前位置:首页 > 技术 > 正文内容

Conda与Pip使用指南:核心原则与避坑技巧

访客 技术 2026年10月17日 1

本文旨在提供一个关于何时以及如何有效使用 conda 和 pip 的综合指南,重点在于核心原则、最佳实践以及避免常见陷阱。

一、核心原则:conda vs pip 什么时候用?

选择正确的包管理器至关重要,以下维度可以帮助您做出决定:

  • 涉及 C/C++ 编译的包(如 numpy, pandas, pytorch): conda 更适合,因为它能处理复杂的二进制依赖。pip 在处理此类包时可能遇到编译问题。
  • 科学计算核心库(scipy, matplotlib, seaborn): conda 是首选,其生态系统对这些库的支持更完善。
  • 纯 Python 包(无系统依赖): pip 是理想选择,它直接从 PyPI 安装。
  • 项目特定包(如 flask, requests, selenium): pip 更为合适,这些包通常是纯 Python 且在 PyPI 上有活跃的社区支持。
  • 多语言/系统级软件(R, JDK, CUDA): conda 擅长管理这些,因为它能处理环境级别的依赖。
  • 环境隔离与复现: conda 在这方面表现出色,能够创建独立、可复现的环境。
  • 安装最新(非稳定)版本: pip 通常提供最新的预发布版本,而 conda 更侧重于稳定版本。

总结: 优先使用 conda 安装核心依赖、系统库;使用 pip 安装项目包、纯 Python 工具。

二、base 环境的用途与最佳实践

1. base 是什么?

base 是 Anaconda 或 Miniconda 安装时默认创建的第一个环境。它通常包含 python, conda, pip, jupyter, ipython 等基础开发工具。base 环境应被视为一个环境管理平台,而不是用来安装项目代码的。

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: 这些是核心库,不同项目可能需要不同版本,在 base 中安装极易导致版本冲突。
  • pytorch, tensorflow: 它们依赖复杂(如 CUDA, MKL, BLAS),版本兼容性要求高,不适合全局安装。
  • flask, requests, selenium: 这些是项目特定依赖,应在独立的项目环境中安装。
  • opencv, torchvision, pyside: 包含 C++ 编译部分,版本对齐难度大。
  • 个人私有库、中间件: 应作为项目依赖,而非全局安装。

原则: base 环境只安装通用工具,不安装项目具体依赖。

三、如何判断一个包该用 conda 还是 pip?

建议遵循以下步骤:

  1. 检查是否为核心科学计算包: 如果是(如 numpy, scipy),优先使用 conda。
  2. 检查是否涉及 C/C++ 编译: 如果是,conda 通常是更好的选择。
  3. 检查是否为纯 Python 包且在 PyPI 上: 如果是,pip 是直接且有效的选择。
  4. 搜索 conda 仓库: 使用 conda search 或 mamba search 。如果找到,则使用 conda install。
  5. 回退到 pip: 如果 conda 中未找到,或者包明确为纯 Python 且无复杂依赖,则使用 pip install 。
  6. 是否需要最新版本: 如果必须是最新(非稳定)版本,pip install --pre 可能是选项,但需谨慎。

实用命令示例:

# 检查包是否在 conda 仓库中
conda search numpy
mamba search numpy

# 检查包是否在 PyPI (需已安装 pip)
pip show numpy

# 安装示例
conda install numpy
pip install flask jupyterlab

四、混用 pip 和 conda 的风险

在同一个环境中混用 conda 和 pip 安装包可能导致以下风险:

  • 依赖冲突: 例如,conda 安装的 numpy 1.23 版本可能与 pip 升级的 numpy 1.24 版本产生冲突,进而破坏其他依赖(如 scipy)。
  • 版本混乱: conda list 和 pip list 的输出可能不一致,使得环境难以复现。
  • 环境不可复现: 依赖链不完整或不明确,增加复现难度和出错概率。
  • 程序崩溃: 意外的依赖不匹配可能导致运行时错误(如 numpy.float64 属性缺失)。
  • 维护困难: 难以追踪哪个包是由哪个管理器安装的,排查问题更加困难。

重要提示: 尽量避免在同一个环境中混用,尤其对于核心库。

五、最佳实践流程(推荐方案)

以下是一个推荐的项目环境管理流程:

# 1. 创建独立的、指定 Python 版本的项目环境
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. (可选)从 requirements.txt 安装 pip 包
pip install -r requirements.txt

# 6. 导出环境配置,以便复现
conda env export > environment.yml

进阶建议:

  • 使用 mamba 加速: mamba 是 conda 的一个高性能替代品,可以显著加快包的安装和依赖解决速度。
    # 安装 mamba
    conda install mamba -c conda-forge
    # 使用 mamba 安装
    mamba install numpy
    
  • 使用 conda-forge 通道: conda-forge 是一个社区驱动的包集合,通常比默认通道包含更多、更新的包。
    # 从 conda-forge 安装包
    conda install -c conda-forge 
    

六、常用包推荐安装方式

以下是一些常用包的推荐安装方式及其原因:

  • numpy, pandas, scipy, matplotlib: 推荐 conda。原因:这些包包含复杂的 C/C++ 编译部分,conda 能更好地处理二进制依赖和版本兼容性。
  • seaborn, statsmodels, plotly: 推荐 conda 或 pip。原因:两者均可,但 conda 安装通常更稳定。
  • pytorch, tensorflow: 推荐 conda。原因:conda 能自动匹配 CPU/GPU(CUDA)版本和兼容的库,简化安装过程。
  • flask, fastapi, requests, selenium: 推荐 pip。原因:这些是典型的 Web 框架和网络库,通常是纯 Python 且在 PyPI 上更新频繁,pip 安装最直接。
  • 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 极高 禁止!避免用 pip 覆盖 conda 安装的核心包。
在 base 环境中安装 torch, pandas 高 base 用于工具,不装项目依赖。
在 conda 环境中 pip install 任意包 中 可行,但需谨慎管理,避免核心包冲突。
在 base 环境中 pip install 项目包 中 不推荐,容易污染全局环境,影响其他项目。
使用 pip install 替代 conda 安装 pytorch 中 除非特殊情况(如安装特定变体),否则优先用 conda。

重要原则: conda 像是"系统管理员",负责全局和核心依赖;pip 像是"临时工具",用于安装项目内的特定 Python 包。不要让"临时工"随意改动"系统"。

八、我的复盘清单(项目前快速检查)

  • [ ] 是否为项目创建了独立的 conda 环境?
  • [ ] 是否主要使用 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 package_name          # 使用 conda 安装包
conda install -c conda-forge package_name # 从 conda-forge 通道安装
pip install package_name          # 使用 pip 安装包
pip list                            # 列出 pip 安装的包
conda list                          # 列出 conda 安装的包

# 导出/导入环境
conda env export > environment.yml  # 导出当前环境配置
conda env create -f environment.yml # 从配置文件创建环境

# 搜索包
conda search package_name           # 在 conda 仓库搜索
mamba search package_name           # 使用 mamba 搜索

最终总结:三句话记住!

  1. conda 管理核心、系统和环境;pip 管理项目和 PyPI 上的 Python 包。
  2. base 是工具区,不是项目区;只装必要开发工具,不装数据处理包!
  3. 先用 conda search,不行再用 pip;混用要小心,版本需对齐!
标签: Conda

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。