技术杂谈:Anaconda 简易入门

PUBLISHED ON JUN 28, 2018

    最近在 Python 语言相关讨论区会看到有网友在问 Anaconda 相关的问题,网络上中文相关的介绍也偏少,因此笔者在这里写一篇相关的介绍,让读者可以比较快上手。Anaconda 是一家美国的软件公司 (见 FAQ),该公司制作了一套 Anaconda Python Distribution,该 Python 发行版算是 Python (和 R) 的懒人包,这套发行版除了原本 Python 和 R 的功能外,另外加入套件管理和环境管理相关的软件 (conda),也预包了 1000+ 数据科学 (和其他领域) 相关的 Python 套件。

    注:环境 (environment) 是 Anaconda 中虚拟的概念,在某个环境中可以指定某个版本的 Python 软件和相关的套件,并且可快速在不同环境中切换,环境间不会互相干扰。

    或许有些读者会对这种商业公司发展的版本有疑虑,笔者也想过类似的议题。不过,Anaconda 除了加上一些比较方便的套件管理及环境管理相关的功能,以及少数 Anaconda 特有的套件外,其他的东西其实和原本的 Python (和 R) 差不多,担心 vendor lock-in 的问题的话就避开少数专有套件即可。如果 Anaconda 真的不幸倒掉,大不了再回头用原本的 Python (和 R),只是少掉 conda 所带来的便利性,原本投资在 Python (和 R) 的技能点不会因而废掉。

    注:笔者和 Anaconda 没有对价关系,本文和该公司也没有关系,纯粹为个人意见。

    Anaconda 的小缺点就是比较肥、占空间;现在的硬盘相对便宜,所以这个议题倒不是问题。如果真的很在意硬盘空间的话,也有 miniconda 这种缩小版,要多少套件才装多少。不过,本文仍然假定读者使用完整的 Anaconda,使用 miniconda 的读者可交互参照着看。另外,Anaconda 默认有 Python 3 和 Python 2 两种版本,不过装好之后都可以再切换环境,版本的选择主要是影响默认环境,所以装 Python 3 的版本应该比较符合 Python 社群未来的走向。本文假定读者使用 Python 3 的版本。

    Anaconda 支援 Windows、Mac、GNU/Linux 等桌面系统,请读者依自已所用的系统来安装。本文以 Windows 系统为主来说明如何使用此发行版。

    安装完成后,可透过 Anaconda Navigator 或终端机环境来使用。Anaconda Navigator 只是把一些 GUI 软件的捷径集中在一起,看起来比较美观,那些软件不一定会用到,而且日后 Navigator 的画面可能会改版。笔者还是比较建议学一下终端机的 conda 软件,常用的指令就那几个,其实不会太难,而且指令的改版通常较慢。如果是在 Windows 下,透过 Anaconda Prompt 可以进入设好环境变量的终端机,而类 Unix 系统上建议直接设置环境变量后用系统终端机。

    本文列出一些常见的使用情境给读者参考。

    安装 Python 2

    虽然 Python 2 系列不会再新增功能了,但少数软件仍未转移到 Python 3,偶尔还是会想到切换到 Python 2.7 版。用以下指令即可安装 Python 2.7 的环境:

    $ conda create -n py27 python=2.7 anaconda
    

    用以下指令切换至新环境:

    $ conda activate py27
    

    使用完就离开:

    $ conda deactivate
    

    安装 R

    虽然 Anaconda 主打 Python,但也可以在 Anaconda 中使用 R 软件。以下指令即可建立一个新环境并安装基本的 R 套件:

    $ conda create -n mro r-essentials
    

    Anaconda 默认安装 Microsoft R Open (MRO),这是微软支援的 R 版本。如果想用原本的 R 软件,将指令修改如下:

    $ conda create -n r-env r-essentials r-base
    

    要使用时切换至新环境:

    $ conda activate mro
    

    附带一提,经笔者实测,目前 (2018 年 6 月下旬) 安装 MRO 会出现以下错误讯息:

    Error: package or namespace load failed for ‘RevoUtilsMath’:
     .onLoad failed in loadNamespace() for 'RevoUtilsMath', details:
      call: NULL
      error: Remove Microsoft R and then re-install.
    Be sure to select MKL libraries as an install option.
    

    但即使加上 MKL 再重装 MRO 也是出现同样的讯息,应该是版本更换时暂时性的问题,但似乎不影响使用;而目前标准 R 软件没有这个错误讯息。

    移除环境

    除了内建的 base 环境外,其他环境若用不到了可以移除,以简省空间。以下指令可以移除环境:

    $ conda env remove -n mro
    

    安装 Python 套件

    conda 也可以用来安装 Python 套件,如下例:

    $ conda install scipy
    

    少数 Anaconda 没有包进来的冷门套件,还是可以回头用 pip 装。

    使用 Jupyter Notebook 或 Spyder

    传统上,学习 Python 时会撰写 Python 脚本,再从终端机调用 Python 软件。不过,透过 Jupyter Notebook 或 Spyder 可以简化输入程序代码的过程。这两个 GUI 软件略有不同,前者是网页程序,主要目的是做为交互式笔记本,后者则是 Python IDE。在 Anaconda 中这两者皆已经预装好,可以直接使用。本文的目的是介绍 Anaconda 本身,或许日后可再加入这两者的教学。

    安装 RStudio

    现在应该很少人会用纯终端机的 R,大部分都会用 RStudio 之类的 IDE,操作上比较亲和。在 Anaconda 安装 RStudio 相当简单,开启 Anaconda Navigator 后,切到 R 软件所在的 environment,再选 Install RStudio 即可安装,之后就用同样的捷径开启 RStudio 即可。或许我们有机会再另开一篇 RStudio 的教学。

    [Update on 2018/06/29] 如果出现 RStudio 无法安装的问题,可参考这里提供的方法排除。笔者在测试时,Windows 版本有碰到此问题,而 GNU/Linux 版本则无。