概要
iRICソフトウェアにMiniconda環境が導入されたことで、iRICソフトウェア上でPythonで記述されたプログラムが動作するようになりました。事例として、土木研究所自然研究共生センターさんが開発されたEvaTRiP Proがあります。
「おいらも、PythonでiRIC上で動くプログラムを作ってみたい!」という方に向けて、ここではその開発方法を紹介したいと思います。
前提知識
本記事では、iRIC上で動くPythonプログラムの開発方法を紹介しますので、Pythonについてある程度知識がある方を対象とします。またプログラム開発にはVS codeを利用します。PythonやVS codeについては以下などを参考に学習してください。
環境設定・準備
まずは以下の手順でiRIC用のMinicondaをインストールします。
1.iRICのMiniConda環境をインストールする
iRICを起動し、「メニューバー>オプション>メンテナンス」を起動します。以下の画面が表示されますので、「iRICを閉じてiRIC Maintainanceを起動」をクリックします。
以下画面が表示されます。「コンポーネントの追加または削除」を選択し、「次へ」をクリックします。
「Miniconda 3」を選択し、「次へ」をクリックします。Minicondaにチェックが入っている方は、インストール済ですのでそのまま「キャンセル」をクリックして終了してください。
次に表示される画面で「更新」をクリックすると更新が開始されます。更新完了すればOKです。
2.【準備】自作ソルバー用のフォルダを作成する
エクスプローラを開き、iRICソフトウェアをインストールしたフォルダを開てください。デフォルトでは、以下にインストールされていますので、以下をエクスプローラーのアドレスバーに貼り付けてください。
%USERPROFILE%\iRIC
iRICのインストールフォルダに名称:"private"とフォルダを作成してください。"private"フォルダを作成したら、"private"フォルダを開いてください。次に"solvers"フォルダを作成します。自作ソルバーは"solvers"フォルダに格納します。
3. サンプルプログラムのダウンロード
上記githubのページにアクセスし、"Code > Download ZIP"からファイル一式を名称を変更せずにダウンロードしてください。"mysolver-master.zip"がダウンロードされるはずです。zipファイルを解凍するといくつかファイルが格納された"mysolver-master"というフォルダが作成されると思います。"mysolver-master"フォルダをフォルダごとコピーして、先ほど作成した"solvers"フォルダにペーストしてください。
フォルダ構成が以下となっていることを確認してください。
%USERPROFILE%\iRIC\PRIVATE
├─solvers
└─mysolver-master
└─main.py・・・・・・・・・pythonのサンプルプログラム
└─definition.xml・・・・・iRIC用 計算条件入出力定義ファイル
└─LICENSE・・・・・・・・・ライセンスファイル
└─README.md・・・・・・・・readmeファイル
└─sampledata.ipro・・・・サンプルプログラム:"main.py"用のサンプルデータ
└─sample_data・・・・"sampledata.ipro"を解凍したフォルダ
以上で、設定および準備は完了です。
Pythonプログラムを確認・実行する
1. VS codeで"mysolver-master"フォルダを開く
VS codeを起動し、「メニューバー>ファイル>フォルダを開く」から、上で作成した"%USERPROFILE%\iRIC\PRIVATE\solvers\mysolver-master"を開きます。フォルダを開いたら"main.py"を開いてください。
2. Python実行環境をiRIC/Miniconda3に設定する
VS codeの画面左下に表示されたPythonX.X.Xをクリックし、**"~/iRIC/Miniconda3/envs/iric/python.exe"**を選択してください。このリストは、あなたのコンピュータにインストールされているPythonの実行環境です。複数存在しているかと思いますので、しっかりパス表記を確認して選択してください。Pythonの実行環境の選択を間違えるとプログラムが正しく動作しません。気を付けてください。
3. 動作確認:サンプルプログラムの実行
iric用のpythonプログラムが適当に動作することを確認するため、"main.py"をF5ボタンを押すなどして実行してみてください。適当に実行できれば適当に環境が設定できていることになります。
iRICソフトウェア上で実行確認してみる
iRICソフトウェアを起動して、「プロジェクトを開く」から"sampledata.ipro"を開きます。"sampledata.ipro"はgithubからダウンロード・解凍したフォルダ(以下)に格納されています。
%USERPROFILE%\iRIC\PRIVATE\solvers\mysolver-master
ファイルが開けたらiRIC上で実行してみてください。正常に動作するはずです。正常に動作しなかった場合は、iRICの「メニューバー>オプション>設定」から設定画面を開いて、Pythonのパス が、**"C:\users[ユーザー名]\iRIC\Miniconda3\envs\iric\python.exe"**になっていることを確認してください。%USERPROFILE%などは利用できないことに注意してください。
注意事項
現状、iRICに同梱されたMinicondaには以下のモジュールがインストールされています。下記以外のモジュールを必要とするPythonプログラムを動作させるためには、別途モジュールをインストール必要があります。この点は課題と認識しており、今後仕様変更する可能性があります。
conda環境
>conda list
# packages in environment at C:\Users\riverlink\iRIC\Miniconda3\envs\iric:
#
# Name Version Build Channel
blas 1.0 mkl
ca-certificates 2021.5.25 haa95532_1
certifi 2021.5.30 py38haa95532_0
cycler 0.10.0 pypi_0 pypi
intel-openmp 2021.2.0 haa95532_616
kiwisolver 1.3.1 pypi_0 pypi
matplotlib 3.4.2 pypi_0 pypi
mkl 2021.2.0 haa95532_296
mkl-service 2.3.0 py38h2bbff1b_1
mkl_fft 1.3.0 py38h277e83a_2
mkl_random 1.2.1 py38hf11a4ad_2
numpy 1.20.2 py38ha4e8547_0
numpy-base 1.20.2 py38hc2deb75_0
openssl 1.1.1k h2bbff1b_0
pillow 8.2.0 pypi_0 pypi
pip 21.1.2 py38haa95532_0
pyparsing 2.4.7 pypi_0 pypi
python 3.8.10 hdbf39b2_7
python-dateutil 2.8.1 pypi_0 pypi
setuptools 52.0.0 py38haa95532_0
six 1.15.0 py38haa95532_0
sqlite 3.35.4 h2bbff1b_0
vc 14.2 h21ff451_1
vs2015_runtime 14.27.29016 h5e58377_2
wheel 0.36.2 pyhd3eb1b0_0
wincertstore 0.2 py38_0
pip
>pip list
Package Version
--------------- -------------------
certifi 2021.5.30
cycler 0.10.0
kiwisolver 1.3.1
matplotlib 3.4.2
mkl-fft 1.3.0
mkl-random 1.2.1
mkl-service 2.3.0
numpy 1.20.2
Pillow 8.2.0
pip 21.1.2
pyparsing 2.4.7
python-dateutil 2.8.1
setuptools 52.0.0.post20210125
six 1.15.0
wheel 0.36.2
wincertstore 0.2
まとめ
本記事では以下を紹介しました。
- iRIC上でPythonプログラムを動作させるための環境設定・準備
- サンプルのPythonプログラムをVScode上で確認・実行する方法
- iRIC上でプログラムを実行する方法
Pythonプログラム書き方について、また別の機会に紹介したいと思います。現段階では、以下を参考して記述してください。Pythonのプログラムを動かすためには、そのPythonプログラムに適した実行環境を整備することが重要になります。Pythonの実行環境設定に関する記事はWeb上にたくさんありますが、僕のほうでも機会を作って記述してみようと思います。
#【参考】関数リファレンス