包管理器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 User guide - Tasks: Managing packages
- CONDA User guide - Tasks: Managing environments
- CONDA Cmd reference - Conda general commands
- CONDA Cmd reference - Conda vs. pip vs. virtualenv commands
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