早在2019年,Windows 10的5月更新(版本1903)即在官方商店中加入了Python 3.7,从那时起,在CMD中输入python或者python3命令,系统会自动把你带到商店里的下载页面,只需在页面上点击“获取”,即可一键安装。Linux和MacOS用户都是开箱即用、无需安装,Windows是之前唯一不自带Python解释器的主流操作系统。
1.什么是conda以及为什么使用conda
Conda是一个跨平台的软件包(不限于Python,设计初衷是任何语言均可)和环境管理器,可用于从Anaconda repository以及Anaconda Cloud安装和管理conda软件包。 Conda软件包是二进制文件,不需要安装任何编译器。Python渐渐成为最流行的编程语言之一,在数据分析、机器学习和深度学习等方向Python语言更是主流。Python的版本比较多,并且它的库也非常广泛,同时库和库之间存在很多依赖关系,所以在库的安装和版本的管理上很麻烦。Conda是一个管理版本和Python环境的工具,它使用起来非常容易。
Anaconda是备受欢迎的解决方案,其本质就是一个Python的发行版,内置了众多Python包和附加软件(pydata生态圈里的软件),所以Anaconda也内置了conda,而Miniconda则提供了一个最小的conda安装环境,十分小巧。pip和conda处理包的底层机制各不相同,conda 对于底层c代码的依赖处理的更好。在使用pip之前必须通过系统包管理器或直接下载运行安装程序来安装Python解释器;Conda可以直接安装Python软件包甚至python解释器。
Conda所具备的功能和行主要包括:
- Conda能够创建隔离的环境,该环境可以包含不同版本的Python以及其他软件包。Pip没有对环境的内置支持,而是依赖于诸如virtualenv或venv的其他工具来创建隔离的环境。
- pip和conda在满足环境中的依赖关系方面有所不同。在安装软件包时,pip在递归的串行循环中安装依赖项,无法确保同时满足所有软件包的依赖关系。如果按顺序之前安装的软件包相对于按之后安装的软件包有不兼容的依赖项版本,会导致冲突和环境破坏。conda使用SAT(satisfiability)solver来验证是否满足环境中安装的所有软件包的所有要求,这种方式可能需要花费更多时间,但有助于避免冲突和环境破坏。
- conda和pip可结合使用。因为pypi有15万可用包,而Anaconda repository中(使用conda命令安装)提供了1,500多个软件包,其中包括最受欢迎的数据科学,机器学习和AI框架。以及可在Anaconda cloud上(使用conda-forge或bioconda命令安装)的几千种其他软件包。
2.miniconda的安装与虚拟环境的创建
Anaconda及miniconda官网和下载页面如下:
https://www.anaconda.com/download/
https://docs.conda.io/projects/miniconda/en/latest/
考虑到miniconda相对小巧,可不必使用国内镜像源。根据自己的系统选择对于应的安装包下载、安装即可。
下载、安装完成后,可进入开始菜单栏中点击Anaconda Prompt(miniconda3)或Anaconda Powershell Prompt(miniconda3),通过conda命令配置Miniconda环境变量以及创建、删除、管理虚拟环境。以下命令创建名为“py37”、使用python 3.7的虚拟环境(-y参数的使用类似linux apt的-y,设置了conda安装过程中完成收集包信息后的问询应答反馈为y)。
conda create --name py37 python=3.7 -y
在没有将miniconda安装路径加入系统path的前提下,我们使用conda都需要从快捷方式打开或者cmd导航至miniconda安装目录,虽然有所不便,但如果在未卸载系统自带python的情况下,这样可以和系统默认python环境形成隔离。
3.“进入”环境及配置环境
创建虚拟环境后,需要通过conda activate激活/“进入”环境,conda默认会工作在“base”环境下,当前工作的环境名称会在命令行提示符中显示。
使用如下命令可以激活及取消激活我们创建的某一虚拟环境。
#激活环境 conda activate py37 #取消激活/“退出”当前虚拟环境 conda deactivate
在默认的base环境下,使用conda deactivate可以退出base虚拟环境。
软件包的安装我们都是在“进入”环境后进行的,即便是默认的base环境下安装的包,在其他环境下也无法使用。因此,我们可以在退出base环境(未激活任何虚拟环境)的背景下进行适当的配置,譬如添加conda源。以下添加了清华、中科大、北外等国内conda源。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/pkgs/free/ #conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/ conda config --set show_channel_urls yes #conda config --remove-key channels
需要特定第三方库如pytorch的,在添加/更换国内源时,需要额外指定添加第三方库源。需要重置为默认源的,使用conda config --remove-key channels即可。另附常用的pip国内源如下:
https://pypi.tuna.tsinghua.edu.cn/simple http://mirrors.aliyun.com/pypi/simple/ https://pypi.mirrors.ustc.edu.cn/simple/ http://pypi.douban.com/simple/
在安装 python 第三方库时,使用pip install -i source_url packagename
命令,可临时将源切换为国内镜像源,如下以安装 opencv为例。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv
4.安装、卸载、更新软件包
conda使用install和remove安装、卸载软件包,如以下对git的安装和卸载。
conda install git #conda install git=2.44 -y conda remove git #conda uninstall git
新版本的conda引入了uninstall作为remove的别名,所以使用conda uninstall卸载软件包是等效的。我们在使用conda安装软件包时,可以直接指定软件包版本。使用conda update可更新软件包,以下分别为更新spyder包、更新所有软件包、更新conda自身。
conda update spyder conda update --all conda update conda
5.查询、删除虚拟环境
直接使用conda env命令,可以查阅conda支持的所有参数,包括create、list、export、remove、update、config等。
我们常用的参数包括list、remove和config。list是列出所有虚拟环境,前面带"*"的即为当前激活的虚拟环境。remove用于删除某一虚拟环境,需要注意的是,不能删除当前激活的虚拟环境,需要先“退出”当前激活的环境再删除。对于config参数,可以配置仅适用于某一虚拟环境的变量,如安装源。
#conda deactivate sd #conda remove --name sd --all conda remove -n sd --all
6.结语
Conda的安装、使用并不复杂,对于典型的python库管理问题能够很好的解决:库A依赖库B-2.1版本,库C依赖库B-3.1版本,这种情况下就需要使用conda进行环境隔离,每个虚拟环境的安装、删除、配置互不影响。
Python 绕不过去的一道坎就是多环境管理,依靠env、venv、pyenv、pipenv都可以进行环境管理,但功能、易用性、通用性方面,conda总体是有优势的。同时,conda是在其安装目录下的envs 子目录下创建环境,而不是项目目录下,也就是说,多个项目是可以共用同一个环境的。
文章评论