安装和配置 Anaconda

    Machine Learning

Anaconda 简介

Anaconda 是一个软件分发平台(distribution of software),自带了 conda 这个管理环境和软件包的工具,是数据分析行业里常用的工具之一(管理各种工具的工具)。

不过 Anaconda 这个平台上的软件都是专门针对数据分析的,通常会结合 Python 更加一般性的 packages 管理工具 pip 来使用,以便能接触到(access)更多的软件和工具。

Anaconda 的作用:

  1. 每个项目(Project)有其对应的运行环境,人们用其中的 conda 隔离开不同项目的环境,以免相互冲突;
  2. 方便人们下载各种数据分析所需要的库(Libraries)和软件包(Packages),类似软件商店;

安装 Anaconda - Windows

Windows 下的 Anaconda 只需去官网下载对应的软件包 ,根据提示安装即可。安装完成打开后是可视化的操作界面,「新建环境」和「安装软件包函数库」都可以使用可视化界面操作完成,唯一要注意的是网络方面如果使用代理上网,或者系统防火墙防护级别过高等,会导致 Anaconda 打开之后卡死在 loading application 这一状态。这时只需要取消代理,或者关掉防火墙即可解决,参见这里


安装 Anaconda - macOS

Anaconda 官网 下载 macOS 系统对应的软件包(一般选择 Python 3.x version 的),然后根据提示安装。

安装好之后,打开终端 Terminal 查看

## 查看 conda 的版本
$ conda --version
conda 4.5.4

## 查看 python 的版本 - 安装 Anaconda 不会影响 Mac 电脑里之前安装的 Python ,不过系统默认使用的 Python 会变成 Anaconda 自带的那个版本
$ python --version
Python 3.6.4 :: Anaconda, Inc.

PS:
虽然 Anaconda 的安装默认会设置 Bash Shell 的环境变量,但若系统仍提示找不到 conda 命令(command not found),则要使用命令 echo $PATH 看路径 /anaconda3/bin/ 是否在环境变量 $PATH 里,不在就要自行添加,这样才能顺利识别相关命令

若终端用的是 Fish Shell ,添加 Anaconda 路径到环境变量的方式如下:

## 以下命令会将 Anaconda 的路径 /anaconda3/bin/ 添加到 $fish_user_paths ,进而添加到 $PATH 这个环境变量里
$ set -U fish_user_paths /anaconda3/bin/ $fish_user_paths

## 添加路径之后就能正确识别 conda 这个命令了
$ conda --version
conda 4.5.4

## 如果 Anaconda 和 Homebrew 的软件冲突(比如 Curl),可注销 $fish_user_paths 中的 /anaconda3/bin/ 路径来暂时隔离开 Anaconda
## 变量 $fish_user_paths 是一个 list ,第一个元素是 fish_user_paths[1]
$ echo $fish_user_paths
/anaconda3/bin/
$ set --erase --universal fish_user_paths[1]

此外还需参考 /anaconda3/etc/fish/conf.d/conda.fish 文件的注释设置 ~/.config/fish/config.fish 文件,才能够在 Fish Shell 里使用 conda activate [环境名] 激活或切换进入指定环境,使用 conda deactivate 来退出当前环境,进入 base 环境(即初始的基本环境)。
推荐参考 Github 上的这个 conda.fish 来调整 Anaconda 自带的 conda.fish 文件,比如设置环境名(env name)显示在左侧。

PS:
Bash Shell 用的是 source activate [环境名] 进入环境,见下文。在 Fish Shell 中,source 这个关键词被占用了,所以只能换别的,默认设置是换成 conda


设置

为了保证下载速度,可考虑设置的是 Anaconda 的软件下载源,即编辑 ~/.condarc 文件,添加相应的镜像地址,否则每次下载都会访问默认的国外网站下载软件,速度可能会因此很慢。不过如果设置了国内的镜像地址,软件版本可能会滞后于世界。所以设置与否,看个人情况而定。

## 使用 vi 编辑 .condarc 文件 - 你也可以使用其他方式编辑
$ vi ~/.condarc

## 编辑后的 .condarc 文件内容如下 - 这里添加的是清华大学的软件镜像地址,通常会比世界滞后两个代
$ cat ~/.condarc
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
  - defaults
show_channel_urls: true
ssl_verify: true

常用指令

一开始我们所处的是 conda 的默认环境(default conda environment),建议经常升级该默认环境,可以避免一些 Bug 和错误

## 升级 conda 本身
$ conda update conda

## 升级 conda 旗下所有可升级的软件(包括 conda 本身)- 虽然此命令包括 conda 本身的升级,但建议先运行上一命令单独升级 conda 之后再运行这个升级全部,因为有用户直接升级全部软件时会报错 
$ conda update --all
$ conda upgrade --all  # conda upgrade is Alias for conda update

接着是 Anaconda 基本的工作流程

## 新建一个环境,指定该环境中你希望安装的 Packages ,以便之后在此环境中开发某项目
$ conda create -n [环境名称] [Package 1] [Package 2] [Package 3] ...

## Examples - 一个 hyphen 代表缩写(如例子里的 -n),两个 hyphens 代表全称(如例子里的 --name)
$ conda create -n my_env numpy
$ conda create --name py3 python=3.6 numpy pandas    ## 还可以指定所用 Python 或者 Package 的版本

使用 activatedeactivate 来进入和切换不同的环境。特别地,在 Windows 系统下,activate 一个新环境之前,最好先 deactivate 当前环境,参见这里

## 进入(或者说切换到)某个环境里 - 注意 fish shell 参照上面的官方设置后,命令是 conda activate(没有 source)
$ source activate [环境名称]

## Example - 切换后,提示符钱的括号里的内容会显示当前所在的环境名称
$ source activate tea_facts
(tea_facts) $

## 离开(或者说注销)某个环境里 - 注意 fish shell 里是 conda deactivate(没有 source)
(tea_facts) $ source deactivate
$

## 离开(或者说注销)tea_facts 环境后,进入 py3 环境
$ source activate py3
(py3) $

接下来就是在环境中安装各种软件库。此过程中, Conda 会自动安装对应的依赖项。例如 pandas 依赖于 numpy(需要有 numpy 才能使用),则安装 pandas 时会同时安装 numpy(如果它之前没被安装的话),即 conda install pandasconda install numpy pandas 的效果一样

## 查看当前所处环境 py3 中安装的所有软件 - 会输出一个目录列表用以查看
(py3) $ conda list

## 查看是否安装了名字含有 "notebook" 的 pakage
(py3) $ conda list | grep -ir "notebook"
(standard input):notebook         5.5.0           py3_0

## 在当前环境 py3 里安装所需的软件包(Package)- 此安装命令是幂等的,即多次运行相同的安装命令安装相同的 Package,效果和运行一次一样  
(py3) $ conda install numpy
(py3) $ conda install jupyter notebook  # 注意 jupyter notebook 是两个软件包,而不是一个

## 也可以同时安装多个软件包(Packages)- 下面安装的是常用的深度学习软件包组合
(py3) $ conda install numpy pandas jupyter notebook matplotlib pillow tqdm scikit-learn 

## 还可以指定所装软件包的版本
(py3) $ conda install numpy=1.10

## 卸载软件
(py3) $ conda remove numpy

## 更新软件
(py3) $ conda update numpy

## 搜索名字包含 beautifulsoup 字符串的软件
(py3) $ conda search '*beautifulsoup*'

PS:
一些库或者框架除了可以使用 conda search 之外,还可以去 conda-forge 查看安装方法,比如 TensorFlow 的安装;


软件重复问题

有时候,我们会遇到开发环境中有两个不同版本的软件库:Conda showing two versions of library

## 当前环境安装了两个不同版本的 tensorflow ,一个来源是 pip ,另一个则是 conda-forge
(py3) $ conda list | grep -ir "tensorflow"
(standard input):tensorflow       1.0.0          <pip>
(standard input):tensorflow       1.10.0        py35_0    conda-forge

为了避免问题,我们希望只留其中一个,此处是留使用 conda 安装的那个:

## 这里要按顺序移除,然后再重装,如果不按顺序,问题会得不到解决
## 第一步,先移除 conda 的 tensorflow
(py3) $ conda remove tensorflow

## 第二步,移除 pip 的 tensorflow
(py3) $ pip uninstall tensorflow

## 第三步,重新安装 conda 的 tensorflow
(py3) $ conda install -c conda-forge tensorflow

## 查看确认
(py3) $ conda list | grep -ir "tensorflow"
(standard input):tensorflow       1.10.0        py35_0    conda-forge

导出环境配置

将配置清单保存成 .yml 文件分享给他人能让对方快速搭建出一模一样的运行环境,以便测试和运行我们的代码

## 导出当前环境的配置清单,并储存到当前目录下的 environment.yml 文件里
(py3) $ conda env export > environment.yml

## 导入 environment.yml 文件,读取里面的配置信息,并依照该配置创建一个环境
## 新建的环境名由 .yml 配置文件中的第一行设定(比如文件第一行是 name: aind-dl,则新环境名为 aind-dl)
$ conda env create -f environment.yml

## 查看所有环境 - 输出一个列表形式的结果,默认环境的名字叫做 root
$ conda env list

## 删除一个环境
$ conda env remove -n env_name

当我们将代码分享在 Github 上的时候,要同时附上 Anaconda 的环境的配置清单文件 *.yml ,甚至要再加上一个 pip 的配置文件 requirements.txt (用 pip freeze 命令输出该配置文件),以便他人能快速配置出相应的环境,运行我们的代码。


有关 Anaconda 的更多操作,还可以参考:


打赏