Anaconda 学习整理
写在开篇,本文内容基于Windows平台,仅供日常使用参考,若您希望进行系统化的Anaconda学习请移步官方文档。
如果您机器的环境已经紊乱,建议:
对本机上各版本的python、Anaconda进行一次完全卸载;推荐采用强力的卸载工具Geek。在geek中搜索python和Anaconda,右键卸载即可。geek下载链接在这里:https://geekuninstaller.com/
仔细检查环境变量中 用户变量及系统变量中的path变量,将其中所有包含“python”、“anaconda”的变量全部删除。
完成后,确保在命令提示窗执行python、pip及conda均是未找到命令。
重启计算机后,开始按照如下指导进行环境的重新搭建工作。
1. Anaconda安装
Anaconda Individual Edition is a Python/R data science distribution and a collection of over 7,500+ open-source packages, which includes a package and environment manager.
Anaconda(个人版)是一个 python/R的数据科学发行版本,它涵盖了超过7500个开源包,其中包括了包管理器和环境管理器。
通常情况下,在windows上我们单独安装Anaconda即可,无需通过官源额外安装python。最佳策略是仅仅安装包含最常用python版本的Anaconda,其余版本python使用环境管理。
注意:Anaconda包含的解释器只是针对base环境下而言的,虚拟环境不受限制。换言之,包含python3.7的Anaconda也可以创建python3.9的虚拟环境~
出于一定考量,我选择了包含python3.7解释器的Anaconda3-5.3.0。各版本的Anaconda安装包我们可以在国内源站找到,笔者用了清华镜像站。也可以在官方下载列表中找到Anaconda-python对应关系及历史版本下载。
下载好后进行安装,注意如下几点:
- 安装位置尽量选在有一定空间(不小于30G保留空间)的磁盘中(不太建议在C盘,因为windows系统中Conda的base环境以及默认新建环境都是在安装目录下存放);安装目录中最好不要出现中文以及空格。
- 勾选将Anaconda加入环境变量、注册Anaconda为默认的python解释环境。
等待安装完成后,我们可以在命令窗口中输入如下命令进行相关性安装结果检测。
此处额外介绍一个检查conda中是否安装某包的命令:
例如:
不指定包名将列出当前conda的全部包。
2.Conda环境管理
这里笔者希望能谈一谈为什么我们要使用anaconda。大多数情况下,似乎电脑上的python-base环境加一个pip几乎能解决所有问题;但对于面向机器学习、大数据方向的开发及科研人员而言,他们往往会面对复杂的包环境,多个项目对同一个包的版本要求可能存在很大差异(特别是一些图形处理类的包),一个包的失配带来一个项目瘫痪的连锁反应并不是玩笑之谈。另一方面,我们可能有使用多版本python的需求,如果在一台电脑安装多个解释器,有可能引入一些混乱因素,破坏已有环境。
因此,我们建议用户养成环境管理的良好习惯。而Anaconda恰好提供了这一功能,你尽可能地为每一个项目都建立独立的环境(当然在熟悉以后你可以按照包的类型和版本建立属于自己的环境template),它可以是不同的python解释器环境,也可以是不同的包环境(不同版本、不同类型),且不同环境间各自互不干扰。
诚然,在开始使用多环境管理时,你会感到非常糟糕,特别是对于长期使用windows的用户而言(Linux多用户情形是天然的环境管理),但请坚信养成这样的习惯将会使你在从事复杂工作时受益匪浅,更有可能在未来某次任务中为你带来“救赎”,Anaconda不会辜负你。
2.0基础环境(base/root)
进入正文,我们打开命令提示窗,首先查看当前的conda 环境。默认情况下,您只有一个root环境,也就是我们最基础的python-base环境,在不激活其他环境的情况下,您的任何操作都将应用到该环境中。另外,您可以看到在环境名后有一个星号,星号指定了您当前处于哪一个环境中。
此外,您也可以使用下述官方推荐命令查看环境:
2.1创建环境
命令conda create
可以创建环境。
2.1.1 指定环境名创建(最简方式)
我们来创建第一个环境,-n
或--name
可以指定环境名,这里环境名(英文)尽量贴合项目内容或者主要包的版本。诸如(t1100k224 表示该环境中tensorflow是1.10.0 keras是2.2.4)。起名法则千万条,自己看懂第一条。 可能会提示您确认新增包,按y 回车即可。
创建好环境后,如果您可以通过conda env list
看到您刚才创建的环境,我们通过以下命令激活环境。环境激活后,您可以看到命令提示符最左侧将出现(环境名),表示您当前的包操作及代码运行环境都将基于该环境。
2.1.2指定名字与py版本(最常用方式)
我们来创建一个包含3.7.0解释器的环境,这也是通常意义上最常用的方式。
通常情况下,如果不指定pytohn的版本,将默认”克隆”一个base环境,指定后则是为您创建一个全新的基于该版本python的最简环境。
2.1.3 指定环境完整路径(最省空间方式)
我们可以使用-p
或--prefix
指定环境存放的完整路径。笔者习惯在空间富足的盘中建立一个专用目录统一存放环境,以python版本\环境名
作子目录规划。
下面命令将创建环境,并指定环境的存放目录是D:\AnaEnv\3.7\tk11
,该环境没有“名字”,此后匹配该环境的操作(例如:激活、删除环境)都需要使用完整路径。
特别注意:
- 官方手册中提及
This command requires either the -n NAME or -p PREFIX option.
,即conda create
必须指定-n
环境名或-p
存放位置,且二者不能同时存在。 - 二者差异:
-n
在Anaconda安装目录下的envs目录中创建与环境同名的目录,来存放该环境,匹配环境时用户使用环境名,Anaconda将在安装目录\envs\
下匹配环境;而-p
则是由用户指定环境的完整位置,匹配环境时用户需要指定完整的环境位置。 - 疑惑:官方何不指定一种同时设置环境名和存放位置的命令模式?
2.1.4克隆本地环境
我们可以使用--clone
来创建一个新环境,并且克隆某个本地环境的配置。该参后接环境名或环境完整路径。
2.1.5从文件中创建
如果您使用过pip install -r requirements.txt
,那这一方式您应该较为熟悉。我们可以使用–file 来指定从他人共享的环境文件读取配置,创建环境。
创建环境文件的方式也很简单,考虑到windows文件可读性建议您创建为yml(实际上后缀名随意):
让我们来看下环境文件的简易版格式:
熟悉格式之后,我们可以自己修改或编写对应的文件,也就是常说的环境模板(Environment Template)。
2.1.6指定包创建
结合官方手册,笔者将命令conda create
归纳为携带两类参数:命名参数(Named Arguments)与位置参数(Positional Arguments)。
命名参数,即需要指定名字的参数。诸如我们的
-n
-p
,此处补充一个常识:-
后跟的参数名是单字母简称,--
后跟的是长参名(或是完整参数名)。而有些参数名既有简称也有长参,就像-n
--name
或-p
--prefix
。位置参数只有一个 package_spec,即不需要名字的参数,但在位置上有要求,对于本条命令,您务必保证package_spec 连贯出现,我们建议您在命令末端使用该参数。本参数特指您在该环境新建时希望加入的包(还可指定包的等级,类比安装包),我们此前的
python=3.7.0
就是用例。下面将创建一个包含python3.6和reuquests的抓包环境:
2.2 删除环境
目前conda并未提供环境删除的专用命令,我们多通过包删除命令来完成。
2.3 激活与退出环境
环境激活:
环境退出(在当前环境中):
2.4 更多学习
我推荐您通过以下方式(同其他命令)进行conda
的个性化学习:
- 您可以使用
-h
来便捷查看某命令的其他用法。 - 您可以访问官方手册的Command Reference来更友好地学习conda。
3.Conda 包管理
3.0 pip与conda区别
介绍包管理,就绕不开官方包管理器pip与(强大)conda的区别,笔者结合查询所得,做了一些
归纳搬用,如果您希望获得更原汁原味的讲解,强烈安利官方答疑!
conda和pip尽管在功能上有重叠,但这两款工具是出于不同目的设计的。
- pip是Python Packaging Authority (PyPA)团队推荐的用于从Python Package Index (PyPI)安装包的工具。
- pip安装的是wheels文件或者源码形式的python软件包,安装源码包时需要配套的编译器(有的还需要一些库)辅助pip完成安装;通常在使用pip前我们需先安装python解释器。
- pip没有内置环境管理,必须依赖virtualenv或venv等其他工具来创建隔离环境。 pipenv, poetry和hatch等工具将pip和virtualenv封装起来提供了统一的包管理和环境管理功能。
- pip以递归、串行循环的方式安装依赖项,无法确保所有包同时满足依赖,特别当前后安装的包存在版本不相容的依赖时,环境可能会被破坏。
- conda是跨平台的包和环境管理器,可以安装和管理来自Anaconda repository和Anaconda Cloud的conda包。
- conda包是二进制文件,无需编译器支持,conda可以直接安装Python包以及Python解释器。conda安装包可能包含用其他语言编写的软件的包,包括但不限于C或C ++库,R包或其他软件。
- conda能够创建可以包含不同版本的Python或其他软件包的隔离环境。
- conda在安装包时采用了一个可满足性(SAT) 求解器来检查当前环境中安装的全部包的全部依赖是否能够满足,这一过程会耗费额外的时间,但能保护环境免遭破坏。
- Anaconda则将pip和conda结合起来用以创建数据科学环境。主要原因是:有相当一部分包只在PyPI上分发,只能通过pip来安装。Anaconda仓库中涵盖1500多个软件包加上第三方Anaconda Cloud(主要是conda-forge 和bioconda)中提供的数千个软件包,相比于PyPI上 150,000多个软件包仍然是相形见绌。
更形象简洁的表述,笔者建议您移步官方答疑。
3.1包安装
3.1.1 常规安装
conda install
用来安装一系列包到指定环境中,多个包之间以空格间隔,可以只指定包名,也可以像bitarry=0.8
一样同时指定包名和版本。
3.1.2 本地安装
若您本地存在conda的二进制包,可以之间通过conda install
安装,但这种安装不会检测依赖关系,也不应同常规方式混用在一条命令中。
3.1.3 从文件中安装
类似于pip install -r requirements.txt
,conda也提供从文件中读取包名和版本进行安装。文件格式与pip
所用的requirements.txt相同。
3.1.4 版本回退式安装
使得当前环境的包组回退到上一版本,详细请参照 2.3.4 包回退。
需要注意:
- 安装包时,conda会安装指定包及其依赖依赖包,安装前会对所安装的全部包进行环境兼容性检测,无法通过兼容性检测时会报错,不会改变当前环境。
- 在不指定包版本时,conda会试图安装最新版的包,为了匹配最新版软件包,conda可能会安装额外的包、甚至对已安装的包进行更新、升级。我们可以通过
--freeze-installed
参数来强制conda在不更新当前已安装包的情况下,选择稍旧的包进行安装。 - 如果您觉得conda的依赖检测过于耗时,可以使用
--no-deps
跳过检测(不推荐)。
3.2 包卸载
在Anaconda中,无论用户处于何种环境下,只要通过conda install
安装的包都会存放在Anaconda主目录的pkgs
目录下。当某一环境中需要安装某包时,Anaconda会首先检查pkgs目录,若目录中已存在所需包,则可以直接将该包拷贝到新环境中。
上述拷贝的实际过程:将
Anaconda\pkgs\包名\Lib\site-packages
下的内容拷贝到Anaconda\envs\环境名\Lib\site-packages
目录下。
3.2.1 从环境中删除
使用 conda remove
来卸载环境中的一系列包,可使用-n 环境名
或-p 环境路径
来指定环境,您也可以使用– all参数来卸载指定环境中的全部包,详见环境删除。
需要注意:
- 卸载包时,
conda remove
只会删除该环境下的包,而不会影响pkgs
目录下的包。若另一环境要安装该包,仍会优先从pkgs
中拷贝。 - 与安装相对应的,
conda remove
会从环境中删除指定包及依赖该包的全部包。换言之,删除包时请务必谨慎检查conda给出的删除列表,以免重要包被卸载。如果希望跳过依赖检测,只删除指定包,可以使用--force
,但会破坏当前环境(不推荐)。
[存疑:在base环境删除包会如何….]
3.2.2 从主机上删除
若要彻底从主机上删除某包,需要使用conda clean
命令来清除Anaconda\pkgs
中的内容。