Edited at

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にアクセスすればよさそうですね。

image.png

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


まとめ

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

おつかれさまでした。


関連リンク