記事
· 2024年10月4日 3m read

Embedded Python を利用する時の注意点Contestant

IRISはPythonの豊富なライブラリや既存のPythonプログラムをそのまま利用する事も、COS内でネイティブにコーディングする事も可能となりました。
しかし開発において、いくつかの問題点があります。

1. Pythonのバージョン

Pythonを使ったプロジェクトを構築していると、バージョンの問題にあたる時があります。
古いバージョンで開発していたところに、使いたいライブラリが対応していなかった等です。
しかし、IRISのEmbedded Pythonを利用する場合には、Pythonランタイムのバージョンに影響される為、プロジェクトで使用するバージョンは、プロジェクト単位はなく、IRISのバージョン単位で決まってしまいます。
また、現時点ではこのPythonランタイムをアップグレードする事はできません。

2. 外部Pythonファイルの利用

私は既に開発済みのPythonプログラムをそのまま活用したいと思い、外部Pythonファイルを読み込んで利用する方法を取りました。
IRISでは外部Pythonファイルを特定の場所に配置する事で、そのファイルをimportする事が出来ます。
デフォルトは{インストールパス}/lib/python です。
しかし、デフォルトではこの1ヶ所のディレクトリが対象となっていて、さらにサブフォルダは対象外となる為、プロジェクト単位などで管理する事も出来ません。

Python対象パスを指定

PythonPathの値を変更する事で、別のディレクトリを指定できます。
また、複数のディレクトリを指定する事も可能です。
Windowsであればカンマ区切り、linux等であればコロン区切りで複数指定が可能です。
但し、間にスペースを入れると認識されませんので注意して下さい。
また、複数ディレクトリに同じ名前のモジュールが存在すると、最初に読み込まれた物を利用するようです。(筆者実体験から)
また、このPythonPathの値は、Pythonの対象ディレクトリを指定した場所だけに変更するのではなく、デフォルトのディレクトリに追加される事に注意して下さい。
PythonPathを書き換えてもデフォルトのディレクトリは読み込まれています。
もしデフォルトのディレクトリに同じ名前のPythonファイルがあると、そちらが先にimportされるようなので注意が必要です。

PythonPathの指定
image
ここに記載されていないが、デフォルトのディレクトリも対象となている。

複数指定する場合は、スペースを入れない
/opt/iris/python/common: /opt/iris/python/project --> コロンの後にスペースを入れると認識されない。

3. 修正が反映しない

IRISは外部Pythonファイルやライブラリを読み込むと、プロセスが閉じるまで再読み込みをしません。
ですので、外部Pythonファイルを修正しても即時反映しません。
この場合、プロセスを一度閉じて再実行する必要があります。
ターミナル実行時などであれば、対処法が思いつきますが、Webブラウザからの場合は、セッションが閉じられても再読み込みされません。
Webブラウザからのアクセスの場合は、ウェブゲートウェイを閉じる必要があります。それは結構な手間です。
そこで、即時反映に近い動きにする為には、importしたモジュールをリロードする方法があります。

importlib.reload({モジュール名})

これをCOSの中でモジュールをimportしている箇所に記載する事で、実行する毎にモジュールのリロードを行います。

import importlib
import module1
import module2

importlib.reload(module1)
importlib.reload(module2)

以上が、筆者が最近経験したEmbedded Pythonを利用する時に起こった問題点です。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください