Anaconda で Python 環境をインストールする

Python やそのパッケージをインストールする方法はいくつかありますが、ここでは Anaconda を使ってインストールする方法を紹介します。

私の周りでは Anaconda で環境構築をすることと Python コミュニティ標準の方法をとることの是非についての議論をよく見かけます。自分の目的にあったものを選択すれば良いと思いますが、初心者にとってどちらが目的に叶うものかを判断するのは難しいことかもしれません。

以下にディストリビューターとして Anaconda (Continuum Analytics 社) が提供している価値について私見をまとめました。

* [Anaconda は Environment Isolation Tool (環境分離ツール) ではない](http://qiita.com/t2y/items/dd6d7f9c70ac2b8a79da)

一方で Python コミュニティ公式のバイナリーディストリビューションを提供するツールである wheel も充実してきました。

* [wheelのありがたさとAnacondaへの要望](http://ymotongpoo.hatenablog.com/entry/2017/02/02/182647)

自分の目的にあったものを考えるきっかけにしてもらえればと思います。

# Anaconda のインストール

以下のサイトから Anaconda をダウンロードできます。

* https://www.anaconda.com/download

インストールするときに Python のバージョンを選択する必要があります。Python のバージョンとして 2.7 と 3.x があります。

結論から言うと、何か特別な理由がなければ、新しいバージョンである 3.x の最新バージョン (現時点では 3.7) を選択すれば良いです。

Python は 2.x と 3.x で互換性がなく、2.x は保守モードになっていて、Python コミュニティとしては [PEP 373](https://www.python.org/dev/peps/pep-0373/) で2020年までサポートされることになっています。

過去の経緯で 2.x を使っている環境もまだサポート期間は残っていますが、今後新しい機能が 2.x に提供されることはありません。そのため、これから Python を始める方や新規に開発をするような状況では迷わず 3.x の最新バージョンを使うと良いと思います。

Windows、OS X、Linux 向けにそれぞれの OS 向けにインストーラーが用意されています。自分が使っているプラットフォームのインストーラーを選択してインストールします。

## Windows でのインストール方法

Windows 向けのインストーラーは以下からダウンロードできます。

* https://www.anaconda.com/download

Windows 向けにはグラフィカルインストーラーのみが用意されています。ここでは 64bit 版のものをダウンロードしてインストール作業を進めます。

*Anaconda3-5.3.0-Windows-x86_64.exe* を実行してインストーラーを起動します。

管理者権限でインストールします。特にこだわりがなければそのままデフォルトでインストールしてしまって良いでしょう。デフォルト設定の状態でインストールすると以下の場所にインストールされます。

```
C:\Anaconda3
```

コマンドプロンプトを起動して python を実行して以下のように Anaconda でインストールした Python インタープリターが起動するのを確認します。

```
C:\Users\user>python
Python 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.1912 64bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
```

試しに numpy をインポートしてみましょう。Anaconda 環境の numpy がインポートされているのが確認できると思います。

```python
>>> import numpy
>>> numpy.__file__
'C:\\Anaconda3\\lib\\site-packages\\numpy\\__init__.py'
```

## OS X でのインストール方法

OS X 向けのインストーラーは以下からダウンロードできます。

* https://www.anaconda.com/download

OS 向けにはグラフィカルとコマンドラインインストーラーの両方が用意されています。ここではグラフィカル版のものをダウンロードしてインストール作業を進めます。

*Anaconda3-5.3.0-MacOSX-x86_64.pkg* を実行してインストーラーを起動します。

特にこだわりがなければそのままデフォルトでインストールしてしまって良いでしょう。個人環境向けにインストールすると以下の場所にインストールされます。

```bash
$ ls ~/anaconda/
Navigator.app	bin		conda-meta	envs		etc		include		lib		pkgs		python.app	share		ssl
```

python を実行して以下のように Anaconda でインストールした Python インタープリターが起動するのを確認します。

```bash
$ python
Python 3.7.0 (default, Jun 28 2018, 07:39:16) 
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
```

試しに numpy をインポートしてみましょう。Anaconda 環境の numpy がインポートされているのが確認できると思います。

```python
>>> import numpy
>>> numpy.__file__
'/anaconda3/lib/python3.7/site-packages/numpy/__init__.py'
```

デフォルトで Anaconda インストーラーが環境変数の *PATH* を設定しています。システムにインストールしているコマンドと Anaconda がインストールしている同名コマンドの競合が気になる場合はこの設定を無効にして、Anaconda を使うときだけ *PATH* 設定をするようにしても良いでしょう。 

```bash
$ vi ~/.bash_profile
# added by Anaconda3 5.3.0 installer
...
export PATH="/anaconda3/bin:$PATH"
```

## Linux でのインストール方法

Linux 向けのインストーラーは以下からダウンロードできます。

* https://www.anaconda.com/download

Linux 向けにはコマンドラインインストーラーのみが用意されています。ここでは 64bit 版のものをダウンロードしてインストール作業を進めます。

```bash
$ bash Anaconda3-5.3.0-Linux-x86_64.sh
...
Do you wish the installer to prepend the Anaconda3 install location
to PATH in your /home/vagrant/.bashrc ? [yes|no]
[no] >>>
```

対話的にライセンス許諾の確認やインストール場所を聞かれますが、特にこだわりがなければそのままデフォルトでインストールしてしまって良いでしょう。最後に Anaconda がインストールした実行ファイルを優先的に使うように環境変数の *PATH* に含めるかが聞かれます。デフォルトでは *no* となっています。

*PATH* をデフォルトで変えることの是非は議論の分かれるところです。例えば、Anaconda は curl コマンドをインストールしますが、システムにインストールされている同コマンドを隠してしまうことになります。

```bash
$ which curl
/usr/bin/curl
$ export PATH=/path/to/anaconda3/bin:$PATH
$ which curl
~/anaconda3/bin/curl
```

他にもシステムにインストールされているコマンドと Anaconda がインストールしているものの競合が気になる場合はデフォルトでは *PATH* を設定せず、Anaconda でインストールした Python (とその環境) を使うときだけ 一時的に端末で *PATH* を設定するようにします。

```bash
$ export PATH=/path/to/anaconda3/bin:$PATH
```

デフォルト設定の状態でインストールすると以下の場所にインストールされます。

```bash
$ ls ~/anaconda3/
LICENSE.txt  conda-meta  etc  libexec  phrasebooks  qml
ssl vscode_inst.py.log  bin  doc  include  man  pkgs  resources
translations  x86_64-conda_cos6-linux-gnu  compiler_compat  envs
lib  mkspecs  plugins  share  var
```

*PATH* を設定したら Python を起動してみます。

```bash
$ python
Python 3.7.0 (default, Jun 28 2018, 13:15:42) 
[GCC 7.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
```

試しに numpy をインポートしてみましょう。Anaconda 環境の numpy がインポートされているのが確認できると思います。

```python
>>> import numpy
>>> numpy.__file__
'/path/to/anaconda3/lib/python3.7/site-packages/numpy/__init__.py'
```


# Anaconda とは ...

[Continuum Analytics 社](https://www.continuum.io/) が提供している Python と [conda](http://conda.pydata.org) というパッケージマネージャーを含む Python ディストリビューションです。サイト上では Python 以外にも R や Scala のパッケージも含んでいるように記載されていますが、主には Python のパッケージだと考えて良いと思います。

Anaconda はデータサイエンスに特化したプラットフォームを提供したいというのが目的のようです。そのため、Python でそういった分野向けによく使われる一連のパッケージ群が同梱されているのが特徴になります。

一般論として Python の世界では大量のデータを分析するツールやライブラリは、処理のパフォーマンスが重要視されることから、C/C++ といった言語で開発された拡張モジュール ([Python インタプリタの拡張と埋め込み](http://docs.python.jp/3.5/extending/extending.html)) を含むパッケージが多いです。これらのパッケージをインストールするには、ローカル環境で使っている OS 向けにコンパイルしてインストールする必要がありますが、Anaconda はコンパイル済みのパッケージを提供する (バイナリーディストリビューション) ことにより、ローカル環境でコンパイルすることなくインストールできます。

一般の開発者であれば、Python の C 拡張モジュールをコンパイルするための環境を構築することは難しくありません。しかし、研究者やデータサイエンティストにとってはそういった環境を構築するという作業は苦痛であるかもしれません。そういった開発環境を構築する煩雑さを取り除けるという利点から Anaconda というバイナリーディストリビューションが普及しています。

# Miniconda とは ...

Python 標準のパッケージマネージャーとして [pip](https://pip.pypa.io/en/stable/) というツールが提供されていますが、Anaconda の環境に慣れ親しんでいるなら [conda](http://conda.pydata.org) をパッケージマネージャーとして使っても良いでしょう。

Anaconda はデータサイエンス向けに一連のパッケージ群を含むディストリビューションですが、一方で Python と conda のみを最小構成でインストールすることもできます。その最小構成のディストリビューションを [Miniconda](http://conda.pydata.org/docs/install/quick.html) と呼んでいます。

Miniconda は以下からダウンロードしてインストールできます。

* http://conda.pydata.org/miniconda.html

# conda の簡単な使い方

パッケージマネージャーとしての *conda* を使ってみましょう。

## インストール済みのパッケージ一覧を表示する

```bash
$ conda list
# packages in environment at /path/to/anaconda3:
#
_license                  1.1                      py36_1
alabaster                 0.7.9                    py36_0
anaconda                  4.3.0               np111py36_0
anaconda-client           1.6.0                    py36_0
anaconda-navigator        1.4.3                    py36_0
...
```

## パッケージを検索する

```bash
$ conda search django
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .......
django                       1.6.5                    py26_0  defaults
                             1.6.5                    py27_0  defaults
                             1.6.5                    py33_0  defaults
                             1.6.5                    py34_0  defaults
...
```

## パッケージをインストールする

```bash
$ conda install django
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .......
Solving package specifications: ..........

Package plan for installation in environment /path/to/anaconda3:

The following NEW packages will be INSTALLED:

    django: 1.10.5-py36_0

Proceed ([y]/n)? y
```

## パッケージをアップグレードする

```bash
$ conda update lxml
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .......
Solving package specifications: ..........

Package plan for installation in environment /path/to/anaconda3:

The following packages will be UPDATED:

    lxml: 3.7.1-py36_0 --> 3.7.2-py36_0

Proceed ([y]/n)? y
```

## パッケージを削除する

```bash
$ conda remove django
Fetching package metadata .......
Using Anaconda Cloud api site https://api.anaconda.org
Solving package specifications: ..........

Package plan for package removal in environment /path/to/anaconda3:

The following packages will be REMOVED:

    django: 1.10.5-py36_0

Proceed ([y]/n)? y
```

## 異なるバージョンの Python 環境を構築する

@python_ufo さんと @y__sama さんにコメントで教えて頂きました。ありがとうございます。

conda の機能としては Python の仮想環境を構築できることに加えて、複数バージョンの Python の切り替えて扱えるようです。Anaconda を使わない場合、仮想環境の構築は [virtualenv](https://virtualenv.pypa.io/en/stable/) を使い、複数バージョンの Python の切り替えは [pyenv](https://github.com/yyuu/pyenv) が使われるケースが多いと思います。conda の機能でこれらの代替としても使えるようです。

Python 2.7 を用いる *py27* という仮想環境を構築しています。

```bash
$ conda create -n py27 python=2.7 anaconda
```

いま使っている環境は以下のようにして調べられます。

```bash
$ conda info -e
# conda environments:
#
py27                     /path/to/anaconda3/envs/py27
root                  *  /path/to/anaconda3
```

Linux や OS X で *py27* 環境に切り替えるには *source* というシェルの組み込みコマンドを使って以下のように実行します。Windows は *source* コマンドがないので直接 *activate* コマンドを実行してください。

```bash
$ source activate py27  # $ activate py27 (on windows)
(py27) $ 
```

conda コマンドで環境が切り替わっていることを確認してみます。

```bash
(py27) $ conda info -e
# conda environments:
#
py27                  *  /path/to/anaconda3/envs/py27
root                     /path/to/anaconda3

(py27) $ python
Python 2.7.13 |Anaconda 4.3.0 (64-bit)| (default, Dec 20 2016, 23:09:15) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Anaconda is brought to you by Continuum Analytics.
Please check out: http://continuum.io/thanks and https://anaconda.org
>>> 
```

*py27* 環境を抜けるには以下のように実行します。

```bash
(py27) $ source deactivate  # $ deactivate (on windows)

$ python
Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 12:22:00) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
```

## conda のドキュメント

conda の詳細な使い方は公式ドキュメントの [Using conda](http://conda.pydata.org/docs/using/index.html) を参照してください。

# anaconda-client の簡単な使い方

[Anaconda Cloud](https://anaconda.org/) というパッケージを管理するためのリポジトリが提供されています。このリポジトリの個人領域に任意のパッケージをアップロードして個人向けのパッケージ管理を行ったりもできるようです。パブリックプロジェクトのプランだと無償で利用でき、プライベートプランだと$7/月のようです。

Anaconda Cloud とやり取りするためのコマンドラインインターフェースとして [anaconda-client](https://github.com/Anaconda-Platform/anaconda-client) が提供されています。anaconda-client をインストールすることで *anaconda* というコマンドを使って Anaconda Cloud を扱えます (Anaconda ディストリビューションをインストールした場合は anaconda-client もインストールされています) 。

## conda で提供されていないパッケージを Anaconda Cloud から検索してインストールする

ここでは [LittleHTTPServer](https://pypi.python.org/pypi/LittleHTTPServer) というパッケージを例に説明します。

conda で提供されていないパッケージは検索しても何も表示されません。

```bash
$ conda search littlehttpserver
Using Anaconda Cloud api site https://api.anaconda.org
Fetching package metadata .......
```

anaconda-client を使って Anaconda Cloud 上のリポジトリを検索してみます。*-t (--package-type)* オプションで *conda* または *pypi* のどちらかのパッケージ種別を指定できるようです。ここでは *conda* を指定します。

```bash
$ anaconda search -t conda littlehttpserver
Using Anaconda API: https://api.anaconda.org
Run 'anaconda show <USER/PACKAGE>' to get more details:
Packages:
     Name                      |  Version | Package Types   | Platforms      
     ------------------------- |   ------ | --------------- | ---------------
     auto/littlehttpserver     |    0.1.4 | conda           | linux-64       
                                          : http://bitbucket.org/t2y/littlehttpserver
     t2y/LittleHTTPServer      |    0.5.0 | pypi, conda     | linux-64       
                                          : Little bit extended SimpleHTTPServer
Found 2 packages
```

誰かが公開してくれている littlehttpserver のパッケージが2件見つかりました。現時点での最新バージョンである 0.5.0 を選択します。ここでは *t2y* というユーザーが公開しているパッケージを選択します。

*-c (--channel)* オプションで以下のように指定してインストールコマンドを実行します。

```bash
$ conda install -c https://conda.anaconda.org/t2y littlehttpserver
Fetching package metadata ...........
Solving package specifications: .

Package plan for installation in environment /path/to/anaconda3:

The following NEW packages will be INSTALLED:

    littlehttpserver: 0.5.0-py36_0 t2y

Proceed ([y]/n)? y
```

パッケージ一覧から littlehttpserver keras がインストールされているのが確認できます。

```bash
$ conda list | grep littlehttpserver
littlehttpserver          0.5.0                    py36_0    t2y

$ littlehttpserver --help
usage: littlehttpserver [-h] [-d DOCUMENT_DIR] [-i INDEX_DIRECTORY]
                        [-p PORT_NUMBER] [-v] [--protocol PROTOCOL]
                        [--servertype {process,thread}] [--version]

optional arguments:
  -h, --help            show this help message and exit
  -d DOCUMENT_DIR, --dir DOCUMENT_DIR
                        set some document directories
  -i INDEX_DIRECTORY, --indexdir INDEX_DIRECTORY
                        set arbitrary top directory
  -p PORT_NUMBER, --port PORT_NUMBER
                        set server port number
  -v, --verbose         set verbose mode
  --protocol PROTOCOL   set protocol
  --servertype {process,thread}
                        set server type
  --version             show program version
```

## anaconda-client のドキュメント

anaconda-client の詳細な使い方は公式ドキュメントの [Anaconda Cloud](https://docs.continuum.io/anaconda-cloud/) を参照してください。