Pillow環境構築 -- virtualenvによる仮想環境、iPythonによるインタラクティブ環境

## 何がやりたいのか

- Pillowの（おそらく）強力なグラフィック処理を

- 保守のしやすいvirtualenvによる仮想化を使い
 
- 使いやすいiPython で操作できる

Pythonの処理環境を実現する。

## 前提条件

Python 3.4 、pip、virtualenvはすでに導入済みであるとする。

## 仮想環境の構築

py3 という作業ディレクトリを作成し、そこにbox01 というvirtualenvの仮想環境を構築する。

```console:
mkdir py3
virtualenv  --python=python3.4 py3/box01

cd py3/box01
```

### 仮想環境を有効化

```console:
source bin/activate
```

### 仮想環境にPillowをインストール

```console:
pip install pillow
```

### 仮想環境にiPython他、各種モジュールをインストール

```console:
pip install ipython3
pip install jinja2
pip install tornado
pip install pyzmq

pip install numpy
pip install matplotlib
pip install pandas
pip install scipy

pip install jsonschema　# 後から入っていないと怒られた

pip install requests # iptest3の実行に必要

pip install mistune # 以下、iptest3で、入ってないって言われた
pip install pygments
pip install pymongo
pip install sphinx
```
### iPythonが実行できるかテスト

iPython3を入れると、iptest3というコマンドがついてきて、実行できるかどうか調べてくれるらしい。

```console:
iptest3
```

実行結果（抜粋）

```console:
Test suite completed for system with the following information:
IPython version: 3.0.0
IPython commit : f75fda4 (installation)
IPython package: ~/py3/box01/lib/python3.4/site-packages/IPython
Python version : 3.4.2 (default, Oct  8 2014, 13:18:07) [GCC 4.9.1]
sys.executable : ~/py3/box01/bin/python3.4
Platform       : Linux-3.16.0-31-generic-i686-with-Ubuntu-14.10-utopic

Tools and libraries available at test time:
   curses jinja2 jsonschema matplotlib mistune numpy pexpect pygments pymongo requests sphinx sqlite3 terminado tornado zmq

Tools and libraries NOT available at test time:
   casperjs phantomjs qt slimerjs
```

下の4つはどうすりゃいいか分からんかった。

結局、入れたモジュール構成は以下のようになった。
（試行錯誤の結果、不必要なモジュールも入っていると考えられますな）

```console:
pip freeze
Babel==1.3
Jinja2==2.7.3
MarkupSafe==0.23
Pillow==2.7.0
Pygments==2.0.2
Sphinx==1.3.1
WebOb==1.4
WebTest==2.0.18
alabaster==0.7.2
beautifulsoup4==4.3.2
certifi==14.05.14
docutils==0.12
gp.recipe.phantomjs==2.0.0.0
hexagonit.recipe.download==1.7
ipython==3.0.0
jsonschema==2.4.0
matplotlib==1.4.3
mistune==0.5.1
nose==1.3.4
numpy==1.9.2
pandas==0.15.2
ptyprocess==0.4
pymongo==2.8
pyparsing==2.0.3
python-dateutil==2.4.1
pytz==2014.10
pyzmq==14.5.0
requests==2.6.0
scipy==0.15.1
six==1.9.0
snowballstemmer==1.2.0
sphinx-rtd-theme==0.1.7
terminado==0.5
tornado==4.1
waitress==0.8.9
webtest-casperjs==0.1
zc.buildout==2.3.1
zc.recipe.egg==2.0.1
```
## iPython サーバーの設定

###プロファイルを作成

```console:
ipython3 profile create py3nb
```

###パスワード文字列を作成

コンソールからipyton3を起動

```console:
ipyton3
```

```py3:
from IPython.lib import passwd
passwd()
```
（設定したいパスワードを2回入力）

 'sha1:<文字列>'
 という出力がでる。これをipython_notebook_config.pyに記述する。

 一旦、ipyton3から抜ける

```py3:
exit()
```

### ノートブック（Notebook）の設定ファイルを編集

設定ファイル python_notebook_config.py　は新規作成

```console:
vi ~/.ipython/profile_py3nb/ipython_notebook_config.py
```

```py3:~/.ipython/profile_py3nb/ipython_notebook_config.py
c = get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 9999 
c.NotebookApp.password = 'sha1:<文字列>'　# 先ほど作成したパスワード文字列
```
この辺はノリというか、勢いで作業したので、間違っている可能性がある。

### 起動時実行スクリプトの設定

```console:
vi ~/.ipython/profile_py3nb/startup/00-startup.py
```

```py3:~/.ipython/profile_py3nb/startup/00-startup.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys, os
import readline
import numpy as np
import scipy as sp
import pandas as pd
import matplotlib.pyplot as plt

# EOF
```

### ノートブック（Notebook）の起動

```console:
ipython3 notebook --profile=py3nb
```

なお、--pylab=inline オプションは廃止されたもよう。

ブラウザからアクセス
http://<ノートブックサーバーのIPアドレス>:9999/

パスワードを入力して、ノートブックに入れればOK

## 動作確認

以下、iPythonのノートブック上で実行

最初にこれをやらなきゃならんらしい。

```py3:
%pylab inline
```

### 1 まずは matplotlibのプロットを確認

（以前に動作確認済）

```py3:
x = np.arange(-3, 3, .1)
y = np.sin(x)
plt.plot(x, y)
```

### 2 Pillowの動作確認

Pillowのインポート

```py3:
from PIL import Image
```

画像の読み込み（画像ファイルは事前にサーバーにアップロードしておく）

```py3:
img = np.array( Image.open('<画像ファイル名>') )
```

画像の表示。
img.show() では表示されないようだ。

```py3:
plt.imshow(img)
```

実行スクリーンショット
![sc20150319.PNG](https://qiita-image-store.s3.amazonaws.com/0/26107/e7f9b4ee-b06b-c462-5e64-c5235c988ee6.png)

## 使ってみよう

カレントディレクトリが乱雑になりそうなので、~/py3/box01の下にipyという作業用ディレクトリを作成して、さらにその下に
in-image/（入力用）
out-image/（出力用）
work-image/（作業用）
というディレクトリを作成し画像ファイルはこの中に入れるようにしています。

↓このような起動用のシェルスクリプトを作成しました。

```bash:run_ipy.sh
#! /bin/bash

source ~/py3/box01/bin/activate
cd ~/py3/box01/ipy
~/py3/box01/bin/ipython3 notebook --profile=py3nb
# EOF
```

[iPython上でPillowを使ってみる（その1） - Qiita](http://qiita.com/suto3/items/2232c7e6885f5d97bfec "iPython上でPillowを使ってみる（その1） - Qiita")

[iPython上でPillowを使ってみる（その2） - Qiita](http://qiita.com/suto3/items/4ac51a91b28fc5092eaf "iPython上でPillowを使ってみる（その2） - Qiita")

[iPython上でPillowを使ってみる（その3） - Qiita](http://qiita.com/suto3/items/a1770423514b4875bc09 "iPython上でPillowを使ってみる（その3） - Qiita")