mac上にpipenvでJupyterデータ分析用Python環境を構築する
はじめに
mac上にpipenvによる仮想環境を作り、Jupyterによるデータ分析用Python環境を構築してみたので、そのときの構築手順をメモする。
これまでmacでPython + Jupyterによるデータ分析は、Anacondaをインストールしてそこで行っていた。
簡単なデータ分析だけをするうちは特に問題なかったが、そのうちFlaskでWebアプリケーションを開発したり、それをHerokuにデプロイするために仮想環境を作ったりしていると依存ライブラリの管理をする上でAnacondaがグローバルにあるのが面倒に感じるようになった。
そのため、Anacondaをアンインストールしいったんきれいな状態に戻した上で、pipenvを導入することにした。これにより、Webアプリ用の仮想環境と同じように、jupyterデータ分析用の仮想環境を同列に管理できるようにした。つまり、依存ライブラリをPipfileとして、各データ分析プロジェクトや各アプリケーションプロジェクト用に用意して管理することが目的。
なお、今回検証に用いた各種バージョンは以下の通り。
- macOS High Sierra 10.13.4
- Python 3.6.5
- pip (pip3) 10.0.1
- pipenv Version: 2018.5.18
pipenvインストール
まず、作業前の状態を確認しておく。
$ which python /usr/bin/python $ python -V Python 2.7.10 $ which pip pip not found
システム標準のPython 2.7が使える状態となっているため、まずPython3をインストールする。
Python3はHomebrewでインストールする。
$ brew install python
これでpython3, pip3コマンドが使えるようになった。
$ python3 -V Python 3.6.5 $ pip3 -V pip 10.0.1 from /usr/local/lib/python3.6/site-packages/pip (python 3.6) $ which python3 /usr/local/bin/python3
pip3でpipenvをインストールする。
$ pip3 install pipenv
pipenvコマンドが実行できるようになった。
$ pipenv --version pipenv, version 2018.05.18
Jupyterデータ分析用環境構築
データ分析を行うためのプロジェクトをjupyter_notebooksとし、プロジェクト用ディレクトリを作成する。
$ mkdir /Users/dev/jupyter_notebooks $ cd /Users/dev/jupyter_notebooks
pipenvで仮想環境を作成する。
$ pipenv shell Creating a virtualenv for this project… Using /usr/local/opt/python/bin/python3.6 (3.6.5) to create virtualenv… (・・・略) (jupyter_notebooks-q86MIwox) $
初回作成時はCreating a virtualenv for this project
と表示され、virtualenvで仮想環境が作成されていることが分かる。
コマンドを打つとactivateもされるため、仮想環境に入った状態となる。プロンプトに(jupyter_notebooks-q86MIwox)
と仮想環境名が表示されていることが分かる。
2回目以降に作成済みの仮想環境に入るときも、同様にpipenv shell
コマンドを実行する。また抜ける場合はexit
すると抜けられる。
データ分析用ライブラリインストール
anacondaを使っていたときはだいたい必要なライブラリが導入済みだったが、今回は一から仮想環境を作っているのでとりあえず分析に必須な定番ライブラリとしてここでは以下をインストールする(他にも必要なものがあれば都度追加する)。
- jupyter
- numpy
- scipy
- pandas
- scikit-learn
- keras
- tensorflow
- matplotlib
- seaborn
仮想環境に入った状態で、pipenvで以下のようにインストールする。
(jupyter_notebooks-q86MIwox) $ pipenv install jupyter numpy scipy pandas scikit-learn keras tensorflow matplotlib seaborn
正常にインストールできればOK。
以下のコマンドでJupyterが起動し、Pythonやインストールしたライブラリが使用できることを確認する。
(jupyter_notebooks-q86MIwox) $ jupyter notebook
matplotlibのimportエラーのため、設定変更
この状態で問題なくPythonとライブラリが使用できれば構築作業完了だったはずなのだが、
今回実施したところ当環境では、Pythonからmatplotlib.pyplotをimportするコードを実行すると下記のようなエラーが発生してしまった。
import matplotlib.pyplot --------------------------------------------------------------------------- ImportError Traceback (most recent call last) <ipython-input-21-864e826dab68> in <module>() ----> 1 import matplotlib.pyplot ~/.local/share/virtualenvs/jupyter_notebooks-q86MIwox/lib/python3.6/site-packages/matplotlib/pyplot.py in <module>() 29 from cycler import cycler 30 import matplotlib ---> 31 import matplotlib.colorbar 32 from matplotlib import style 33 from matplotlib import _pylab_helpers, interactive ~/.local/share/virtualenvs/jupyter_notebooks-q86MIwox/lib/python3.6/site-packages/matplotlib/colorbar.py in <module>() 30 31 import matplotlib as mpl ---> 32 import matplotlib.artist as martist 33 import matplotlib.cbook as cbook 34 import matplotlib.collections as collections ~/.local/share/virtualenvs/jupyter_notebooks-q86MIwox/lib/python3.6/site-packages/matplotlib/artist.py in <module>() 13 14 import matplotlib ---> 15 from . import cbook, docstring, rcParams 16 from .path import Path 17 from .transforms import (Bbox, IdentityTransform, Transform, TransformedBbox, ImportError: cannot import name 'rcParams'
rcParamsのImportErrorが発生している。
調べたところ、以下の記事の内容とエラーメッセージは違うものの、同じ対応方法で解消できた。
https://qiita.com/Kodaira_/items/1a3b801c7a5a41c9ce49
まずmatplotlibrcファイルの場所を検索する。
(jupyter_notebooks-q86MIwox) $ python -c "import matplotlib;print(matplotlib.matplotlib_fname())" /Users/dev/.local/share/virtualenvs/jupyter_notebooks-q86MIwox/lib/python3.6/site-packages/matplotlib/mpl-data/matplotlibrc
上記matplotlibrcファイルを開き、以下のように編集する。
変更前
backend : macosx
変更後
backend : Tkagg
この変更後、正常にmatplotlib.pyplotがimportできるようになった。
まとめ
macでJupyterによるPythonデータ分析環境をpipenvを用いて構築した。
anacondaを使うと簡単に必要なものが一括で導入されて便利だったが、Flask等Webプロジェクトと共存する上では面倒だった。
今回pipenvで自分で仮想環境を管理することで、パッケージ管理もcondaを使わずpipfileとpipfile.lockでプロジェクトごとに管理できるようになって見通しがよくなった!
以上