カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまに数学やデータ分析なども。

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でプロジェクトごとに管理できるようになって見通しがよくなった!

以上