包管理器conda与Python

什么是conda?

conda是一个包管理器。值得注意的是,它不仅仅是Python的包管理器,而是一个通用的包管理器,当初设计时被用来管理任何语言的包。在目前来看,conda环境中所有语言的包管理,都是为了Python而服务的。

Anaconda与Miniconda

Anaconda是一个Python的发行版,内置了众多Python包和附加软件(pydata生态圈里的软件),所以Anaconda自然内置了conda。

而Miniconda则提供了一个最小的conda安装环境,十分干净轻巧。

conda与pip

conda和pip均可以用来管理Python依赖包,但二者也仅仅在包管理这个子集上有交集

pip和conda处理包的底层机制各不相同,pip使用wheels,conda是二进制编排。conda对于底层C代码的依赖处理得更好。

conda与virtualenv

conda和virtualenv都可以创建虚拟环境,进行Python运行环境的隔离。

你也可以在virtualenv中使用conda,但强烈不建议混用两者

conda环境

使用Anaconda / Miniconda

Miniconda只包含了基本的Python解释器和Conda环境,轻巧便捷,易于使用。Miniconda官方文档

Anaconda则在Miniconda的基础上,附带了众多Python包和附加工具。Anaconda在科研界是备受欢迎的Python解决方案。Anoconda官网

可根据自己的实际使用需求进行选择。

使用conda env隔离不同工程

养成良好习惯,Python工程一定要隔离环境!

无论使用Python自带的venv,还是使用Conda env,隔离环境是十分必要的。

  • Python venv创建的虚拟环境,我们一般会手动指定其创建在对应工程内的 venv/ 中
  • Conda create创建的环境,会在conda安装目录下进行集中管理
conda --help    #获取命令解释帮助

conda管理包

安装包:

conda install package_name                #当前环境安装
conda install -n env_name package_name    #指定环境安装

卸载包:

conda remove package_name                #卸载当前环境的包
conda remove -n env_name package_name    #卸载指定环境的包

注意: 如果是通过pip安装的包,移除时也请使用 pip uninstall package_name 命令移除,如果使用 conda remove 可能会发生异常,导致conda不可用。

更新包:

conda update package_name                #更新当前环境的包
conda update -n env_name package_name    #更新指定环境的包

更新conda:

conda update conda

列出已安装包:

conda list              #查看当前环境已安装包
conda list -n env_name  #查看指定环境内的包

搜索包:

conda search package_name    #搜索conda现有的源里面是否有该包

conda管理环境

创建conda环境:

conda create -n $NAME_OF_ENV python=3.6 [package1 package2 ...]

由于conda管理不同版本的Python,是把Python视为包进行管理的,所以这里指定Python版本,相当于指定了初始化conda环境的包

查看 Conda 环境列表:

conda env list    #显示所有环境的列表
conda info -e
conda info -envs

激活 Conda 环境:

conda activate $ENV_NAME

退出当前环境:

conda deactivate

删除conda环境:

conda env remove -n $ENV_NAME -all

实用官方文档

conda依赖包文件(yml/txt)

导出当前已激活的环境配置:

conda env export > environment.yml

利用 environment.yml 创建环境:

conda env create -f environment.yml

对 environment.ym 文件修改后更新环境:

conda env update -f environment.yml

安装 pip freeze 创建的 requirements.txt :

conda install --yes --file requirements.txt

关于conda环境的可移植性

实际上,在conda环境中,无论使用 conda env export 还是 pip freeze ,得到的依赖列表都是不可轻易移植的。

conda安装包时,不仅会安装命令行指定的包,也会安装各种为了硬件加速、协同的依赖包(包括C++环境),这就导致了在conda环境中,靠自动生成的依赖文件并不可轻易移植环境。

这既是conda的优势(解决了依赖问题,提升运行速度),也是conda的劣势(由于依赖于平台的非Python包牺牲了部分移植性)。

conda清理

Conda 的各项冗余缓存内容可以通过下述指令清理:

conda clean <param>

具体清理内容可以通过 -h 参数进行查看,例如:

conda clean -p        #删除没有用的包
conda clean -t        #删除tar包
conda clean -y --all  #删除所有的安装包及cache

关于源

显示现有安装源

conda config --show channels
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - https://mirrors.cloud.tencent.com/anaconda/pkgs/free/
  - https://mirrors.cloud.tencent.com/anaconda/pkgs/main/
  - https://mirrors.cloud.tencent.com/anaconda/cloud/conda-forge/
  - https://mirrors.cloud.tencent.com/anaconda/cloud/pytorch/
  - https://mirrors.cloud.tencent.com/anaconda/pkgs/pro/

添加源

conda config --add channels https://mirrors.cloud.tencent.com/anaconda/pkgs/pro/

移除源

conda config --remove channels https://mirrors.cloud.tencent.com/anaconda/pkgs/pro/

使用建议

不要混用 pip 和 conda

conda和pip、virtualenv都是很好的工具,它们为不同的目的而存在,如何使用可根据个人喜好和需求而来。

但pip和conda解决包间依赖问题以及包安装的方式差异很大,混用两者可能会导致各种问题。请不要混用两者:

  • 要么持续使用pip、virtualenv
  • 要么持续使用conda

使用 venv 和 pip 创建开发(编程)环境

大部分(几乎全部)的Python包均有跨平台的特性,所以在编程时,使用Python自带的venv和pip可以较为轻松获取到工程所需的依赖包列表。

作者的相关博客链接:

使用 Conda 部署生产(运行)环境

conda安装Python包时,会附带安装各种用于硬件加速、协同的依赖包,在代码运行上更为快速、友好。使用开发时得到的 requirements.txt 创建conda环境即可(见2.3)。

(整理自网络)

参考资料:

https://blog.csdn.net/sigmarising/article/details/88774548

https://blog.csdn.net/sigmarising/article/details/89446397

posted @ 2020-12-16 14:35  箐茗  阅读(708)  评论(0编辑  收藏  举报