anaconda想必大家都不陌生,属于使用python的重要工具,更是学习机器学习、深度学习的必备工具。在搭建环境过程中,感觉出现的许多问题根源在于对于anaconda的基本原理理解不到位,导致许多无效操作。为此,我重温了一遍anaconda的相关背景知识,希望对各位也能有所收获。
python解释器
首先我们需要从python本身说起,从根源寻找问题,我们在使用python语言编写程序之前需要下载一个python解释器,这才是python的本体,没了python解释器,我们即使写了无比正确优雅的python脚本也没办法运行,那这个解释器在哪呢? 就在你安装python的地方。
所有的第三方包都放在site-packages文件夹里面
最关键的,一个python环境中需要有一个解释器,和一个包集合解释器:解释器根据python的版本大概分为2和3。python2和3之间无法互相兼容,也就是说用python2语法写出来的脚本不一定能在python3的解释器中运行包集合:包集合中包含了自带的包和第三方包,第三方包我们一般通过pip或者easy_install来下载,当一个python环境中不包含这个包,那么引用了这个包的程序不能在该python环境中运行
问题所在:python环境解释完了,那么接下来就要说明这样的环境究竟产生哪些问题,因为anaconda正式为了解决这些问题而诞生的
到底该装 Python2 呢还是 Python3
python2和python3在语法上是不兼容的,那我的机器上应该装python2还是python3呢,可能一开始选一个学习就好了,但是如果你要开发的程序必须使用python2而不能使用python3,那这时候你就不得不再下载一个python2,那这时候环境变量该设谁的目录呢,如果还是切换环境变量岂不是很麻烦虽然目前Python3使用的范围更广,但是Python3小版本之前也存在一些差异
包管理
如果我在本地只有一个python环境那我所有程序用到的各种包都只能放到同一个环境中,导致环境混乱。另外当我将写好的程序放到另一电脑上运行时又会遇到缺少相关包,需要自己手动一个个下载的情况实在是烦人。要是能每个程序开发都选用不同的环境,而开发好之后又能将该程序需要的环境(第三方包)都独立打包出来就好了
与virtualenv的对比
anaconda
是一个包含180+的科学包及其依赖项的发行版本。可以创建一个独立的Pvthon环境,其包含的科学包包括: conda,numpy,scipy,ipython notebook等
virtualenv
用于创建一个独立的Python环境的工具,新环境中需要手动安装需要的三方包
pip与conda比较
依赖项检查
pip
不一定会展示所需其他依赖包
安装包时或许会直接忽略依赖项而安装,仅在结果中提示错误
conda
列出所需其他依赖包
安装包时自动安装其依赖项
可以便捷地在包的不同版本中自由切换
环境管理
pip
维护多个环境难度较大
conda
比较方便地在不同环境之间进行切换,环境管理较为简单
对系统自带Python的影响
pip
在系统自带Pvthon中包的更新/回退版本/卸载将影响其他程序
conda
不会影响系统自带Python
适用语言
pip
仅适用于Python
conda
适用于Python,R,Ruby, Lua,Scala,Java,JavaScript,C/C++,FORTRAN
conda结合了pip和virtualenv的功能
Anaconda虚拟环境的管理
打开anaconda prompt
创建新环境
conda create --name <env_name> <package_names>
例如: conda create --name env1 python==2.7
创建了一个名为env1的环境,python版本为2.7
默认情况下,新创建的环境将会保存在/Users/<user_name>/anaconda3/env目录下,其中,<user_name>为当前用户的用户名
env_name:即为新创建的环境名,建议使用英文进行命名,且不加空格,名称两边不加尖括号“<>”
package_names:即安装在环境中的包名,名称两边不添加尖括号<>
如果要在新创建的环境中创建多个包,则直接在<package_names>后以空格隔开,添加多个包名即可。如:a,即创建了一个名为“python3”的环境,环境中安装版本为3.7的python,同时也安装了numpy和pandas
--name 也可以替换成-n
说明:
- 如果创建环境后安装Python时没有指定Python的版本,那么将会安装与Anaconda版本相同的Python版本,即如果安装Anaconda第2版,则会自动安装Python 2.x;如果安装Anaconda第3版,则会自动安装Python 3.x
- 当成功切换环境之后,在该行行首将以"(env_name)"或"[env_name]"开头。其中, “"env_name"为切换到的环境名
退出环境至物理环境
deactivate
显示已创建环境
conda info --envs
或者 conda info -e 或者 conda env list
结果中*所在行即为当前所在环境
复制环境
conda create --name <new__env_name> --clone <copied_env_name>
copied_env_name:即为被复制/克隆环境名,环境名两边不加尖括号"<>"
new_env_name∶即为复制之后新环境的名称,环境名两边不加尖括号"<>"
删除环境
conda remove --name <env_name> --all
包管理
获取当前环境中已安装的包信息
conda list
查找可供安装的包版本
- 精确查找
conda search --full-name <package_full_name >
--full-name:为精确查找的参数
<package_full_name>︰是被查找包的全名。包名两边不加尖括号"<>"
- 模糊查找
conda search <text>
<text>:是查找含有“此字段"的包名。此字段两边不加尖括号"<>”
安装包
在当前环境中安装包
conda install <package_name>
指定版本号
conda install <package_name>=versiono
在指定环境中安装包
conda install --name <env_name> <package_name >
使用pip安装包
pip install <package_name>
说明:当使用conda install无法进行安装时,可以使用pip进行安装
注意:
- pip只是包管理器,无法对环境进行管理。因此如果想在指定环境中使用pip进行安装包,则需要先切换到指定环境中,再使用pip命令安装包
- pip无法更新python,因为pip并不将python视为包
- pip可以安装一些conda无法安装的包;conda也可以安装一些pip无法安装的包。因此当使用一种命令无法安装包时,可以尝试用另—种命令
从Anaconda.org安装包
说明:当使用conda install 无法进行安装时,可以考虑从Anaconda.org中获取安装包的命令,并进行安装.浏览器中输入http:/ /anaconda.org (无需注册)
复制To install this package with conda run:"下方的命令,并粘贴在终端中执行
卸载包
卸载当前环境中的包
conda remove <package_name>
卸载指定环境中的包
conda remove --name <env_name> <package_name>
更新包
更新指定包
conda update <package_name>或conda upgrade <package_name>
说明︰更新多个指定包,则包名以空格隔开,向后排列。例如:conda updatepandas numpy matplotlib即更新pandas、numpy、matplotlib包
更新所有包
conda update --all或conda upgrade --all
说明:在安装Anaconda之后执行上述命令更新Anaconda中的所有包至最新版本,便于使用。