conda实践指南
选择Anaconda还是Miniconda?
最好选择Miniconda,详细解释见Stackoverflow回答What's the purpose of the "base" (for best practices) in Anaconda?。
base环境的特殊作用
安装一些必定会共用的软件或者包,比如git、make、cmake等。在base环境中安装的包可以在其他virtual中调用。但是其他virtual环境中conda安装的包则无法相互调用。其他虚拟环境下的使用python packages时优先搜索该虚拟环境下的package,如果没有它就搜索base环境下的package,也就是base环境下的package是可以被其他虚拟环境使用的
pip与conda
conda install xxx:这种方式安装的库都会放在anaconda3/pkgs目录下,这样的好处就是,当在某个环境下已经下载好了某个库,再在另一个环境中还需要这个库时,就可以直接从pkgs目录下将该库复制至新环境而不用重复下载。pip install xxx:分两种情况,一种情况就是当前conda环境的python是conda安装的,和系统的不一样,那么xxx会被安装到anaconda3/envs/current_env/lib/python3.x/site-packages文件夹中(如果当前conda环境是base环境,pip install的package应该就是安装在anaconda3/Lib/site-packages下),如果当前conda环境用的是系统的python,那么xxx会通常会被安装到~/.local/lib/python3.x/site-packages文件夹中。
这里引出一个问题:conda和pip安装同一个xxx库情况下,conda环境下python代码中import xxx时,谁安装的xxx优先级较高会被import?对于这个问题,存在多种情况(比如一个版本在base中,另一个在当前环境中;两个都在当前环境中),我们也不回答这个问题,感兴趣的可以去stackoverflow上查找。但是,我们给出的建议是坚决不允许在当前环境中安装两个不同版本的同一个package。
pip install 还是conda install?
pip在安装package时会自动检索安装的pkg的依赖并且检查版本冲突,conda则解决依赖的问题很弱,环境包多了以后经常要解决依赖几分钟到十几分钟。但conda安装之后一定可以work,而pip只负责请求什么安装什么,不负责安装之后一定可以work。
比较好的实践原则是conda创建虚拟环境,装torch/tensorflow等比较难装的包,基础环境配好以后,后面装包一律用pip。
如何有效利用不同conda环境中的pip管理环境中的package?
pip只能管理一个版本的python,并且每次在一个新的虚拟环境中安装pip都会改变默认pip指令对应的pip版本,pip对于多版本python管理非常容易造成混乱。那么有什么好方法使用pip管理多个版本python呢?
参考stack overflow中的高质量回答,我们简要翻译如下:
- 创建环境
conda create -n venv_name并激活conda activate venv_name - 安装pip:
conda install pip。pip被安装到当前环境下。 - 找到当前环境对应的真实文件夹。它应该是类似于:
anaconda/envs/venv_name/。 - 使用绝对路径指明使用的pip:
/anaconda/envs/venv_name/bin/pip install package_name
卸载对应环境中安装的package
同样使用绝对路径指明pip: /anaconda/envs/venv_name/bin/pip uninstall package_name

浙公网安备 33010602011771号