为什么不要用 pip 安装 conda

几乎所有人都直接安装 Anaconda。但它不过是 conda 包管理器 + 预置一系列常用 sci&math 包。

如果我有环境洁癖,只允许存在一个 Python 环境,我可以 pip install conda ,再逐个 conda install xyz 安装那些 conda 下的包吗?


Why

接触 Python 有好些年了,用得不算多,主要做辅助的脚本工具,更像瑞士军刀,不是主力武器。而我的工作偏开发,所以 Anaconda 有所耳闻,并未直接使用。直到有数据分析的需求。

快速浏览相关的介绍和对比,大概得出这么一些信息:

  • conda 是个包管理器
  • Python + conda = Miniconda
  • Minconda + 一系列预置的 sci&math 的包 = Anaconda

大概讨论这个的都是偏 Science 和 Data Analysis 的社区,大家都觉得直接安装 Anaconda 是标准操作,哪怕你已经安装了 Python。至于为什么不能在 Python 上安装 conda,几乎没有提及。

所以我想试一下。虽然我明知道直接安装会省事很多,但我要知道为什么。

Try

直接上手试:

1
2
3
4
5
6
7
8
9
10
11
pip install conda # 前面试过一次,所以有 cache
Collecting conda
Using cached https://files.pythonhosted.org/packages/74/4e/c533c3136427be62c38cc0e038cabf167bb54489c2ced2f6df903c456861/conda-4.3.16.tar.gz
Collecting pycosat>=0.6.1 (from conda)
Using cached https://files.pythonhosted.org/packages/c0/fd/e38d68774c0a345b0090d608a90f1fbf423970d812f7ec7aef9ac024e648/pycosat-0.6.3.zip
Collecting requests>=2.12.4 (from conda)
Using cached https://files.pythonhosted.org/packages/7d/e3/20f3d364d6c8e5d2353c72a67778eb189176f08e873c9900e10c0287b84b/requests-2.21.0-py2.py3-none-any.whl
Collecting ruamel.yaml>=0.11.14 (from conda)
Using cached https://files.pythonhosted.org/packages/d3/6b/7d085479a131c16fd910f22172ca7cecf5e5c8ec0b508abf543a54a3b4b0/ruamel.yaml-0.15.85-cp36-cp36m-win_amd64.whl
Collecting menuinst (from conda)
Could not find a version that satisfies the requirement menuinst (from conda) (from versions: )No matching distribution found for menuinst (from conda)

找不到 conda 依赖的 menuinst。

Google 之,得到 https://stackoverflow.com/questions/43397018/could-not-find-a-version-that-satisfies-conda-for-python-3 的方案:安装 4.2.7 版本的 conda ,再用 conda 升级它自己:

1
2
3
4
pip install auxlib
# 省略输出
pip install conda==4.2.7
# 这次提醒缺少 VSC++ 套件......

咦,有点不对劲。我明明是想用 conda 管理二进制依赖,好不用自己安装各种非 Python 的编译环境来着。

没事,我在答案里还发现了 conda 的安装包:https://www.continuum.io/downloads#windows

结果点进去……Error522。嗯,也许最新版的下载地址变了,我直接在 https://continuum.io 找。

一点,地址变成 https://www.anaconda.com/ 了。

OK, Anaconda

根据网上资料,这 continuum 就是开发 conda 的公司。可能由于 Anaconda 成为了最知名的产品,公司直接改名 Anaconda Inc. 了……

我找了半天,没有直接提供 conda 的安装包。最多安装 Miniconda,但是还是不可避免多出一个 Python 环境。

既然我并非真的闲得想手动安装一个一个常用依赖,只是想知道 Why,我最终安装了 Anaconda,并且多了一个 Anaconda 专用的 Python 3.7 (未加入 PATH)。以后一般 Python 的应用开发,使用 原来的 Python 3.6,Anaconda 相关的在 Anaconda Prompt 下操作。以上。

some tips

pip 与 conda 并非竞争对手——他们的工作有部分重叠,但更多面向不同的需求:

  • pip 面向纯 Python 环境,从源码安装,是 Python 官方包管理器
  • conda 来自 Python 不止于 Python,是为 PyData 社区解决各种非 Python 的二进制依赖

本质上,这是一个二难质问:如果你愿意折腾用 pip 安装 conda ,你就没有必要安装 conda;既然你需要 conda 为你解决二进制依赖,你就不能用 pip 安装——因为 conda 本身也有一系列二进制依赖。

后续操作:(如果有必要,我考虑另起一篇展开说)

  • 安装 Anaconda (官方已经不提供二进制的 conda 安装包),既然这样,不再折腾
  • 当前版本(2018.12)已带 Jupyter
  • 添加清华 channels
  • conda 安装 nbextensions
  • 修改 notebook 默认位置
    • 快捷方式改参数
    • 配置文件改 jupyter notebook --generate-config

知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议
本文为本人原创,采用知识共享 “署名-非商业性使用-相同方式共享” 4.0 (CC BY-NC-SA 4.0)”许可协议进行许可。
本作品可自由复制、传播及基于本作品进行演绎创作。如有以上需要,请留言告知,在文章开头明显位置加上署名(Jayce Chant)、原链接及许可协议信息,并明确指出修改(如有),不得用于商业用途。谢谢合作。
详情请点击查看协议具体内容。