使用anaconda以后再要使用不在conda环境中的包,要怎么安装?

用pip的话install不到andaconda的环境里面去,conda install又没有该包
关注者
261
被浏览
298,289

26 个回答

2022年更新

应该用 Nix Flakes


2018年的原答案

先说答案,你这个问题应该用Anaconda Project。但光靠Anaconda Project可能也不够。

在Python世界,虽然有很多工具可以搞一点依赖管理,但每一个工具都不能解决全部问题。

  • pip可以管理Python依赖,但是pip包都是源码包,得在安装时编译,常常由于系统环境的原因而编译失败。此外pip也不能用来安装官方版的opencv这样的原生库。
  • pyenv可以管理Python版本
  • Virtualenvvenv可以创建虚拟环境,让多个项目之间的Python依赖隔离开,不会在项目之间冲突。
  • pipenv把pip、pyenv和virtualenv的功能整合到一起,但是仍然没有解决源码编译的问题和原生库的安装问题。
  • Conda是个包管理器,可以支持二进制包,所以不需要安装时从源码编译了,而且也可以装原生库。但是,一些 pip 里的 Python 库在 conda 里找不到。
    • Anaconda是用Conda管理的Python科学计算发行版
    • Conda Forge是另一个Python发行版,要比Anaconda的包更丰富。但这里有个坑就是Conda Forge和Anaconda并不完全兼容,如果你有一个项目同时用到Anaconda和Conda Forge里的包,有可能会挂。
  • Anaconda Project可以在一个项目里创建多个虚拟环境,既可以管理conda依赖,也可以管理pip依赖,但还是缺了CUDA这样的系统包和一些命令行工具。
  • Apt之类的系统包管理工具可以安装系统包,但是会受到操作系统发行版的限制,比如说Ubuntu 14.04里就装不了CUDA 9。
  • Docker可以在容器里装一个操作系统发行版,从而可以方便的切换操作系统版本。但是容器和宿主必须要共享操作系统内核,所以没办法在macOS直接运行Linux发行版的docker容器。
  • nvidia-docker可以把宿主的GPU设备文件和驱动挂载到Docker容器里,但是只支持Linux。

这些工具解决的问题虽然不完全一样,但也有一部分重叠。我具体给一点建议:

  1. 如果临时写几行不在项目里的代码,用操作系统全局的 Anaconda 环境。
  2. 如果需要创建多个数据挖掘或科学计算的项目,那么用 Anaconda Project 隔离这些项目,不要用pipenv。
  3. 如果需要创建多个Python网站的项目,那么用 pipenv 隔离这些项目,不要用 conda。
  4. 用Anaconda Project管理的项目中,如果需要安装纯Python库,优先用pip包,如果是需要额外编译的库,优先用conda包。
  5. 如果需要隔离系统环境,用Linux版的Docker,在容器里安装系统依赖。
  6. conda和Linux发行版都有的二进制包,优先用conda装。因为发行版发布周期慢,版本旧。

对于ubuntu系统,

首先,将原来安装到/usr/lib/python2.7/dist-packages的包卸载:

pip uninstall <例如tqdm>

然后,使用anaconda目录下的pip重新安装:

sudo /usr/local/anaconda2/bin/pip install <例如tqdm>

最后,查看anaconda下面的包,发现了tqdm的踪影:

conda list