MacでAnaconda/Jupyter Notebook をつかえる環境を構築する(含 Homebrew,pyenv,Pythonのインストール)


Pythonでデータ分析とかしてると、Jupyter Notebook っていうブラウザ上のコンソールでPythonを操作するサンプルなどがネットで出てきます。。それらを実行するJupyter Notebook環境をMacで構築するときの手順メモです。

Jupyter Notebook は、データ分析・科学計算などのプラットフォームであるAnacondaに同梱されているモノをインストールしようと思います。

前準備

PythonはPython2系と3系があって、Macにはデフォルトで2系がインストールされています。で、その環境を壊すことなく別バージョンのPython(Python3やAnacondaのこと)を使用するには、pyenvというバージョン切替ツールをつかうことが多いです。そしてそして、そのpyenvは MacのパッケージマネージャであるHomebrew経由でインストールします。

Homebrewのインストール

参考: https://brew.sh/index_ja

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew --version
Homebrew 1.8.2
Homebrew/homebrew-core (git revision 6f74; last commit 2018-11-11)
$

以上です。

pyenvのインストール

早速Homebrewでpyenvを入れます。

$ brew install pyenv
==> Downloading https://homebrew.bintray.com/bottles/pyenv-1.2.8.mojave.bottle.t
######################################################################## 100.0%
==> Pouring pyenv-1.2.8.mojave.bottle.tar.gz
🍺  /usr/local/Cellar/pyenv/1.2.8: 612 files, 2.4MB

インストールはOK。.bash_profileに以下を追加します。

$ cat << '__EOF__' >> ~/.bash_profile
## Set path for pyenv
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi
__EOF__
$
$ cat ~/.bash_profile
## Set path for pyenv
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi
$ source ~/.bash_profile
$ pyenv --version
pyenv 1.2.8
$

以上で、pyenvのインストール完了です。

pyenvでのPythonのセットアップ

$ python --version
Python 2.7.10

Macには、このPythonが標準で入っています。

$ pyenv versions
* system (set by /Users/xxx/.pyenv/version)

pyenvでインストールできるPythonを一覧してみます。

$ pyenv install --list
Available versions:
  ...
  3.6.7
  3.7.0
  3.7-dev
  3.7.1
  3.8-dev
  ...
  anaconda3-5.2.0
  anaconda3-5.3.0

ためしに3.7.1を入れてみます。

$ pyenv install 3.7.1
python-build: use openssl from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.1.tar.xz...
-> https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
Installing Python-3.7.1...
python-build: use readline from homebrew

Installed Python-3.7.1 to /Users/xxx/.pyenv/versions/3.7.1

下記のコマンドで、標準で稼働するPythonを切り替えます。

$ pyenv global 3.7.1
$ pyenv versions
  system
* 3.7.1 (set by /Users/xxx/.pyenv/version)
$  python --version
Python 3.7.1

以上でPythonのバージョン切替を行うための環境のセットアップは完了です。

Anacondaのインストール

いよいよAnacondaです。pyenv上にインストールします。

$ pyenv install anaconda3-5.3.0
Downloading Anaconda3-5.3.0-MacOSX-x86_64.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.0-MacOSX-x86_64.sh
Installing Anaconda3-5.3.0-MacOSX-x86_64...
Installed Anaconda3-5.3.0-MacOSX-x86_64 to /Users/xxx/.pyenv/versions/anaconda3-5.3.0

$ pyenv versions
  system (set by /Users/xxx/.pyenv/version)
* 3.7.1
  anaconda3-5.3.0
$ pyenv global anaconda3-5.3.0
$ pyenv versions
  system
  3.7.1
* anaconda3-5.3.0 (set by /Users/xxx/.pyenv/version)
$

$ python --version
Python 3.7.0

Anacondaを使用できる環境の構築が完了です。

Anacondaの分離環境を構築する

通常のPythonにはプロジェクトごとに仮想環境(分離環境)を構築するための venv コマンドというのが用意されていますが、Anacondaにも同じような環境分離ツール conda がありますので、それを使って分離環境を構築します。

例として、以下のコマンドで tmpという名前をつけた Python 3.7.2のの分離環境を構築します。

$ conda create --name tmp python=3.7.2   <- バージョン指定も出来る
.....
    zeromq:                             4.3.1-h0a44026_3
    zict:                               0.1.4-py37_0
    zipp:                               0.3.3-py37_1
    zlib:                               1.2.11-h1de35cc_3
    zstd:                               1.3.7-h5bba6e5_0

Proceed ([y]/n)?

...
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use:
# > source activate tmp
#
# To deactivate an active environment, use:
# > source deactivate
$

分離環境が構築できました。分離環境の中に入るには下記のコマンドで。

$ source activate tmp
pyenv: activate: command not found

怒られましたorz。。パスが通ってないからっぽいので、、、

$ ls -lrt $PYENV_ROOT/versions/
drwxr-xr-x  24 xxx  staff  816  4  7 19:17 anaconda3-5.3.0

$ source $PYENV_ROOT/versions/anaconda3-5.3.0/bin/activate  tmp
(tmp) $
(tmp) $ python --version
Python 3.7.2
(tmp) $ 

分離環境に入れました。。

その他コマンド

分離環境の一覧表示

$ conda info -e
# conda environments:
#
base                  *  /Users/xxx/.pyenv/versions/anaconda3-5.3.0
tmp                      /Users/xxx/.pyenv/versions/anaconda3-5.3.0/envs/tmp

$

ちなみに分離環境はpyenvからは下記のように見えるようです

$ pyenv versions
  system
  3.7.1
* anaconda3-5.3.0 (set by /Users/xxx/.pyenv/version)
  anaconda3-5.3.0/envs/tmp

中に入ってみてみると、、、

$ source /Users/xxx/.pyenv/versions/anaconda3-5.3.0/bin/activate  tmp
(tmp) $ pyenv versions
  system
  3.7.3
* anaconda3-5.3.0 (set by /Users/xxx/.pyenv/version)
  anaconda3-5.3.0/envs/tmp

(tmp) $ conda info -e
# conda environments:
#
base                     /Users/xxx/.pyenv/versions/anaconda3-5.3.0
tmp                   *  /Users/xxx/.pyenv/versions/anaconda3-5.3.0/envs/tmp

(tmp) $

分離環境から抜けるには

(tmp) $ source $PYENV_ROOT/versions/anaconda3-5.3.0/bin/deactivate
$ 

分離環境の削除コマンドはこちら。

$ conda remove -n tmp --all
Remove all packages in environment /Users/xxx/.pyenv/versions/anaconda3-5.3.0/envs/tmp:
...
Proceed ([y]/n)?
$

$ pyenv versions
  system
  3.7.1
* anaconda3-5.3.0 (set by /Users/xxx/.pyenv/version)
$

削除されました。

Jupyter Notebook を起動

最後にJupyter Notebookを起動します。

$ jupyter notebook
[I 18:37:54.077 NotebookApp] JupyterLab extension loaded from /Users/xxx/.pyenv/versions/anaconda3-5.3.0/envs/tmp/lib/python3.7/site-packages/jupyterlab
[I 18:37:54.077 NotebookApp] JupyterLab application directory is /Users/xxx/.pyenv/versions/anaconda3-5.3.0/envs/tmp/share/jupyter/lab
[I 18:37:54.079 NotebookApp] Serving notebooks from local directory: /Users/xxx
[I 18:37:54.079 NotebookApp] The Jupyter Notebook is running at:
[I 18:37:54.079 NotebookApp] http://localhost:8888/?token=xxxxxxx
[I 18:37:54.079 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 18:37:54.086 NotebookApp]

    To access the notebook, open this file in a browser:
        file:///Users/xxx/Library/Jupyter/runtime/nbserver-44243-open.html
    Or copy and paste one of these URLs:
        http://localhost:8888/?token=xxxxxxx

起動したようです。Webブラウザで上記URLにアクセスすればよさそうですね。

停止は Ctrl C で停止可能です。

まとめ

Anaconda/JupyterNotebookを使用するために、brew > pyenv > anaconda > condaの分離環境 > Jupyter っていうそこそこややこしい構図になってしまいましたが、分離した環境を作れることで、壊れたら消してまた構築するなど、便利な環境が構築できましたね。

おつかれさまでした。

関連リンク