IBM i にPythonの実行環境を作る

# IBM iでもyumでPythonをさくっとインストール

yumが使えるようになったIBM iはPythonに限らず、さまざまなオープンソースの実行環境を簡単に作れます。
事前にyumをインストールする手順はこちら（[IBM i でyumを使う](https://qiita.com/sugata/items/29b646a946b0c11d290b)）の記事を参考にしてください。

Python2はyum導入時に一緒にインストールされているので、ここから先はPython3の環境をセットアップしていきます。

Python3のインストールにはACSのGUIか、SSHのCLIが使えます。


## 方法1：Python3をACSのGUIでインストール

ACSを起動して[ツール]メニューの[オープン・ソース・パッケージ管理]を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524161/94a409ed-e530-bfcb-8d4f-006ff96d02c3.png)
Python3を導入するSystemとUSRPRFを指定して[OK]で進みます。
![スクリーンショット 2019-11-14 10.21.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524161/6dd1989f-c7b2-26f2-2e2b-88ac5d7284a7.png)
Available packagesのタブに、導入可能なパッケージ一覧が確認できます。Python3のパッケージも随時追加されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524161/bd6f8e45-b994-a55f-ac22-af573e5ed2d2.png)
ここではまず、2つのパッケージ **python3** と **python3-pip** を選択して[install]ボタンを押しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524161/be9c9d98-c419-aada-0101-566b36322957.png)
別ウィンドウが起動して、**yum install**コマンドが実行されます。依存関係がある別パッケージも同時に選択されていることがわかります。**y**でインストールを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524161/f53b32e7-ae8b-1dea-b303-16f4a427b532.png)
導入完了を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524161/0e7e8981-64e5-bc60-599d-0202151b91ec.png)
ACSのGUIで簡単にPythonが導入できます。他にも必要なパッケージがあれば、同様の手順で追加インストールできます。


## 方法2：SSHクライアントからyumコマンドでインストール
ACSのGUIを使うだけでなく、Linuxと同様にSSHクライアントのCLIで操作することももちろんできます。
SSHターミナルでibmiに接続します。

```
$ ssh user@ibmi
```

bashを使います。

```
$ bash
```

python3関連のパッケージを確認します。

```
bash-4.4$ yum list | grep python3
python3.ppc64                                3.6.9-1                   @ibm
python3-pip.noarch                           9.0.1-2                   @ibm
python3-setuptools.noarch                    36.0.1-2                  @ibm
python3-wheel.noarch                         0.29.0-2                  @ibm
python3-Pillow.ppc64                         5.0.0-4                   ibm
python3-asn1crypto.noarch                    0.24.0-0                  ibm
python3-bcrypt.ppc64                         3.1.4-5                   ibm
python3-cffi.ppc64                           1.11.5-2                  ibm
python3-cryptography.ppc64                   2.2.2-4                   ibm
python3-dateutil.noarch                      2.7.5-0                   ibm
python3-devel.ppc64                          3.6.9-1                   ibm
python3-ibm_db.ppc64                         2.0.5.9-0                 ibm
python3-idna.noarch                          2.8-0                     ibm
python3-itoolkit.ppc64                       1.6.1-0                   ibm
python3-lxml.ppc64                           4.2.1-3                   ibm
python3-numpy.ppc64                          1.15.4-0                  ibm
python3-pandas.ppc64                         0.22.0-4                  ibm
python3-psutil.ppc64                         5.5.1-0                   ibm
python3-pycparser.ppc64                      2.19-1                    ibm
python3-pynacl.ppc64                         1.2.1-3                   ibm
python3-pytz.noarch                          2018.5-2                  ibm
python3-pyzmq.ppc64                          17.1.2-0                  ibm
python3-rpm.ppc64                            4.13.0.1-17               ibm
python3-scikit-learn.ppc64                   0.19.1-6                  ibm
python3-scipy.ppc64                          1.1.0-0                   ibm
python3-six.noarch                           1.10.0-0                  ibm
python3-tkinter.ppc64                        3.6.9-1                   ibm
```
numpy と pandas を追加で導入してみます。

```
bash-4.4$ yum install python3-numpy python3-pandas
Setting up Install Process

(中略)

===================================================================================================================
 Package                          Arch                    Version                      Repository             Size
===================================================================================================================
Installing:
 python3-numpy                    ppc64                   1.15.4-0                     ibm                   6.3 M
 python3-pandas                   ppc64                   0.22.0-4                     ibm                    20 M
Installing for dependencies:
 libblas3                         ppc64                   3.8.0-0                      ibm                   173 k
 libcblas3                        ppc64                   3.8.0-0                      ibm                    49 k
 libgcc-aix                       fat                     6.3.0-24                     ibm                   472 k
 libgfortran3                     ppc64                   6.3.0-24                     ibm                   1.0 M
 liblapack3                       ppc64                   3.8.0-0                      ibm                   3.4 M

Transaction Summary
===================================================================================================================
Install       7 Packages

Total download size: 31 M
Installed size: 147 M
Is this ok [y/N]: y

(中略)

Installed:
  python3-numpy.ppc64 0:1.15.4-0                          python3-pandas.ppc64 0:0.22.0-4

Dependency Installed:
  libblas3.ppc64 0:3.8.0-0    libcblas3.ppc64 0:3.8.0-0  libgcc-aix.fat 0:6.3.0-24  libgfortran3.ppc64 0:6.3.0-24
  liblapack3.ppc64 0:3.8.0-0

Complete!
```
yumコマンドでも簡単に追加ができました。
SSHクライアントであれば、IBM iだと意識せずに、yumコマンドでオープンソース環境を管理できます。

## Pythonの起動確認
sshクライアントでPython3を起動してみます。

```
bash-4.4$ python3
Python 3.6.9 (default, Oct 31 2019, 11:30:53)
[GCC 6.3.0] on aix7
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import pandas as pd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/QOpenSys/pkgs/lib/python3.6/site-packages/pandas/__init__.py", line 19, in <module>
    "Missing required dependencies {0}".format(missing_dependencies))
ImportError: Missing required dependencies ['pytz', 'dateutil']
```

**pandas** をインポートしたら **pytz** と **dateutil** がないというエラーが出ました。Pythonなのでpipで追加することを考えますが、IBM iでは、yumパッケージとして提供されている場合があるのでyumを先に確認します。

```
>>> exit()
bash-4.4$ yum list | grep python3
(中略)
python3-dateutil.noarch                      2.7.5-0                   ibm
(中略)
python3-pytz.noarch                          2018.5-2                  ibm
```

2つともyumにあったので、yumでインストールします。

```
bash-4.4$ yum install python3-dateutil python3-pytz
```

再度Python3を起動してpandasをインポートしてみます。

```py
bash-4.4$ python3
Python 3.6.9 (default, Oct 31 2019, 11:30:53)
[GCC 6.3.0] on aix7
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import pandas as pd
>>> data = pd.Series([1.0, 2.4, 5.3, 7], index=['a', 'b', 'c', 'd'])
>>> data
a    1.0
b    2.4
c    5.3
d    7.0
dtype: float64
>>> exit()
```

IBM i 上にPython3の実行環境ができました。

## 最後に
IBM iでも、Pythonの環境を簡単に準備できます。yumをサポートしたので基本的にはCLIで管理できますが、ACSでGUIのインターフェースも用意しているのがIBM iらしく思えます。
PCでもPythonを動かせますが、IBM iをPython環境として整備すれば、IBM iのデータを扱いやすくなりますし、チームでの開発もしやすいのではないでしょうか。

この記事の方法では、Python3の実行環境をroot環境に作っていますが、chrootを使えばコンテナのように環境仮想化ができるので、目的に合わせてパッケージの組み合わせを選んだり、root環境をクリーンに保ったまま、オープンソースを活用することもできます。

次回はchrootを使って仮想環境を作った上で、jupyter notebookを動かしたいと思います。