yanagida_iwaya
2023年11月28日 9時53分
お世話になっております、柳田と申します。
pythonスクリプト上でCON8のUART1、7を用いてシリアル通信をしたく、作業を進めております。
動作確認として、pythonのパッケージであるpyserialのimportを試行していますが、エラーが起きうまく動きません。
何かアドバイスいただければと思い本トピックを投稿いたしました。
現在、ATDE9+VScode開発セミナー資料などを参考に、以下条件で開発環境の構築を目指しております。
https://armadillo.atmark-techno.com/system/files/blog/Armadillo_Base_OS…
* 機種:Armadillo-IoT A6E + 自社製拡張基板(CON8に接続)
* 仮想開発環境:ATDE9(Oracle VM Virtual Box 7.0にて起動)
* BaseOS上での立ち上げコンテナ:Alpine 3.18.4(gwコンテナとは別で新規に立ち上げ)
* 使用言語:python3
* IDE:VScode(ABOS-DE使用)
* 開発内容:I2C、UART、GPIOを使用した通信、ロガーシステム
以下が現在までの作業内容です。
* ABOS-DEでSWUファイルの生成、および「App run on Armadillo」でデバッグできることを確認
* at-dtwebを用いてCON8拡張ピンの使用設定(UART1、7、I2C4、GPIO1_IO01を有効)をし、作成したSWUファイルをArmadillo機に反映
* Dockerfile中のインストールパッケージ参照部分をalpineに合わせてapkコマンドに変更
* packages.txtに各機能の動作確認用としてlibgpiod、i2c-tools、evtestを追加
* i2c-toolsのi2cdetectコマンドで、接続しているI2C機器のスレーブアドレスを取得できることを確認(ピン設定が反映されていることを確認)
* pythonスクリプトでデモプログラムとしてhttpbinへランダムデータをpostできることを確認(pythonスクリプト自体は動作することを確認)
ここで、UART1、および7の動作確認をしようとpythonスクリプトへpyserialをimportしようと試みているのですが、pythonスクリプト実行時にエラーとなりimportができない状況です。
> ModuleNotFoundError: No module named 'serial'
上記を解決するため試行した内容をまとめますが、いずれも同じくパッケージが上手く参照されず、同様のエラーが表示されてしまいます。
* packages.txtにpy3-pyserialを追加
* config/app.confの「set_command python3 /vol_app/src/main.py」の前に以下追加
> set_command apk del serial # 同名パッケージ参照エラーの解決を目標
> set_command apk add py3-pyserial
linuxベースOSでの開発に慣れておらず、必要な情報など不足しているかもしれませんが、切り分けに必要な情報などありましたらご指摘いただければ幸いです。
以上、よろしくお願いいたします。
コメント
at_shinya.koga
2023年11月28日 13時46分
アットマークテクノの古賀です。
柳田さん:
>追記です。
>以下手順でpipによるpySerial導入を試行しましたが、同様のエラーが発生しNGでした。
>* packages.txtに「py3-pip」を追加
>* Dockerfile Packages処理後に以下追加
>RUN python3 -V
>RUN pip3 -V
>RUN pip3 list
>RUN pip3 uninstall serial
>RUN python3 -m pip install pyserial
>RUN pip3 list
>
>* プロンプト出力でpyserialがインストールできているだろうことを確認(cacheメッセージは省略)
>-----------------------------------------------------------
…
>STEP 7: RUN python3 -V
>Python 3.11.6
…
>STEP 12: RUN pip3 list
>Package Version
>---------- -------
>packaging 23.1
>pip 23.1.2
>pyparsing 3.0.9
>pyserial 3.5
>setuptools 67.7.2
>-----------------------------------------------------------
たしかに、問題なさそうに見えますね。
>* App run on Armadillo実行、VScode TERMINAL上でエラー発生を確認(スクリプトファイル名は仮の名前に置き換えています)
>-----------------------------------------------------------
>Traceback (most recent call last):
> File "/vol_app/src/main.py", line 12, in
> import XXXXX as XX
> File "/vol_app/src/XXXXX.py", line 6, in
> import serial
>ModuleNotFoundError: No module named 'serial'
>-----------------------------------------------------------
※以下、シリアルコンソールまたは、ssh 接続で A6E にログインしてからの作業になります。
「linuxベースOSでの開発に慣れておらず」とのことですので、以下の手順で分からないところがありましたら、
遠慮なくおっしゃってください。
試しに、ですが、
armadillo:~# podman exec -it <コンテナ名> /bin/sh
でコンテナ内のシェルを起動した後、
import serial
の一行だけが入った .py ファイルを作り、python3 に実行させると、どうなるでしょうか?
同じエラーが出る場合は、python3 を -v 付きで実行すると、もしかすると何か手がかりが得られるかも知れません。
yanagida_iwaya
2023年11月28日 19時03分
アットマークテクノ 古賀様
柳田です。
ご確認ありがとうございます。
> でコンテナ内のシェルを起動した後、
>
> import serial >
> の一行だけが入った .py ファイルを作り、python3 に実行させると、どうなるでしょうか?
> 同じエラーが出る場合は、python3 を -v 付きで実行すると、もしかすると何か手がかりが得られるかも知れません。
コンテナ中に/home/atmark/test.pyを作成し、実行しましたが、同様のエラーが出ております。
ご助言通りpython3のバージョンを確認いたしましたが、コンテナ作成時のpython3バージョンと差異が無いように見えます。
・test.py
import serial
・実行結果
/home/atmark # python3 test.py Traceback (most recent call last): File "/home/atmark/test.py", line 1, in <module> import serial ModuleNotFoundError: No module named 'serial' /home/atmark # /home/atmark # python3 -V Python 3.11.6
ところで、コンテナ中で念の為pipのバージョンを確認したところ、pip自体そもそもインストールされていないように見えました。
/ # python3 -m pip -V /usr/bin/python3: No module named pip / # pip -V sh: pip: not found
そこで、起動したコンテナにpipインストール作業が反映されていないののではと思い、試しに以下の作業をしたところ、エラーは発生しなくなり、スクリプトも回っているだろうことを確認しました。
* ABOS-DEの「Generate development swu」で「development.swu」を生成
* ABOS-web経由でArmadilloに「development.swu」をアップロード
* ABOS-DEから「App run on Armadillo」を実施(これまではここでimport serialの参照エラーが発生)
ただし、原理や仕組み、正しい対処法が不明です。
もしなにか心当たりなどありましたら、ご教示いただけないでしょうか?
今回のようにコンテナ中に新しくパッケージをインストールし、スクリプトをデバッグしたいとなったとき、上記の手順は必要なものでしたでしょうか?
以上、まとまりがなく申し訳ありませんが、よろしくお願いいたします。
koga
2023年11月28日 21時45分
アットマークテクノの古賀です。取り急ぎ、一点だけコメントします。
柳田さん:
>>でコンテナ内のシェルを起動した後、
import serial
>>の一行だけが入った .py ファイルを作り、python3 に実行させると、どうなるでしょうか?
>>同じエラーが出る場合は、python3 を -v 付きで実行すると、もしかすると何か手がかりが得られるかも知れません。
>
>コンテナ中に/home/atmark/test.pyを作成し、実行しましたが、同様のエラーが出ております。
>ご助言通りpython3のバージョンを確認いたしましたが、コンテナ作成時のpython3バージョンと差異が無いように見えます。
...
>/home/atmark # python3 -V
>Python 3.11.6
'-V' ではなく、'-v' (verbose option) のことでした。
# python3 -v test.py
とすると、どうなるでしょうか?
yanagida_iwaya
2023年11月29日 9時56分
アットマークテクノ 古賀様
取り急ぎのご返信、ありがとうございます。
> '-V' ではなく、'-v' (verbose option) のことでした。
>
>
> # python3 -v test.py >
>
> とすると、どうなるでしょうか?
よく確認できておらず申し訳ありませんでした。
当該プロジェクトに関して、前投稿の手順で課題となるような環境を崩してしまったため、検証用に別の新規プロジェクトをおこし、同様の状況を再現した上で実行しました。
/home/atmark # python3 -v test.py import _frozen_importlib # frozen import _imp # builtin import '_thread' # <class '_frozen_importlib.BuiltinImporter'> import '_warnings' # <class '_frozen_importlib.BuiltinImporter'> import '_weakref' # <class '_frozen_importlib.BuiltinImporter'> import '_io' # <class '_frozen_importlib.BuiltinImporter'> import 'marshal' # <class '_frozen_importlib.BuiltinImporter'> import 'posix' # <class '_frozen_importlib.BuiltinImporter'> import '_frozen_importlib_external' # <class '_frozen_importlib.FrozenImporter'> # installing zipimport hook import 'time' # <class '_frozen_importlib.BuiltinImporter'> import 'zipimport' # <class '_frozen_importlib.FrozenImporter'> # installed zipimport hook # /usr/lib/python3.11/encodings/__pycache__/__init__.cpython-311.pyc matches /usr/lib/python3.11/encodings/__init__.py # code object from '/usr/lib/python3.11/encodings/__pycache__/__init__.cpython-311.pyc' import '_codecs' # <class '_frozen_importlib.BuiltinImporter'> import 'codecs' # <class '_frozen_importlib.FrozenImporter'> # /usr/lib/python3.11/encodings/__pycache__/aliases.cpython-311.pyc matches /usr/lib/python3.11/encodings/aliases.py # code object from '/usr/lib/python3.11/encodings/__pycache__/aliases.cpython-311.pyc' import 'encodings.aliases' # <_frozen_importlib_external.SourceFileLoader object at 0xb6b2bbb0> import 'encodings' # <_frozen_importlib_external.SourceFileLoader object at 0xb6b2b2f0> # /usr/lib/python3.11/encodings/__pycache__/utf_8.cpython-311.pyc matches /usr/lib/python3.11/encodings/utf_8.py # code object from '/usr/lib/python3.11/encodings/__pycache__/utf_8.cpython-311.pyc' import 'encodings.utf_8' # <_frozen_importlib_external.SourceFileLoader object at 0xb6b2b4f0> import '_signal' # <class '_frozen_importlib.BuiltinImporter'> import '_abc' # <class '_frozen_importlib.BuiltinImporter'> import 'abc' # <class '_frozen_importlib.FrozenImporter'> import 'io' # <class '_frozen_importlib.FrozenImporter'> import '_stat' # <class '_frozen_importlib.BuiltinImporter'> import 'stat' # <class '_frozen_importlib.FrozenImporter'> import '_collections_abc' # <class '_frozen_importlib.FrozenImporter'> import 'genericpath' # <class '_frozen_importlib.FrozenImporter'> import 'posixpath' # <class '_frozen_importlib.FrozenImporter'> import 'os' # <class '_frozen_importlib.FrozenImporter'> import '_sitebuiltins' # <class '_frozen_importlib.FrozenImporter'> Processing user site-packages Processing global site-packages Adding directory: '/usr/lib/python3.11/site-packages' import 'site' # <class '_frozen_importlib.FrozenImporter'> Python 3.11.6 (main, Oct 4 2023, 06:22:18) [GCC 12.2.1 20220924] on linux Type "help", "copyright", "credits" or "license" for more information. Traceback (most recent call last): File "/home/atmark/test.py", line 1, in <module> import serial File "<frozen importlib._bootstrap>", line 1176, in _find_and_load File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked ModuleNotFoundError: No module named 'serial' # clear builtins._ # clear sys.path # clear sys.argv # clear sys.ps1 # clear sys.ps2 # clear sys.last_type # clear sys.last_value # clear sys.last_traceback # clear sys.path_hooks # clear sys.path_importer_cache # clear sys.meta_path # clear sys.__interactivehook__ # restore sys.stdin # restore sys.stdout # restore sys.stderr # cleanup[2] removing sys # cleanup[2] removing builtins # cleanup[2] removing _frozen_importlib # cleanup[2] removing _imp # cleanup[2] removing _thread # cleanup[2] removing _warnings # cleanup[2] removing _weakref # cleanup[2] removing _io # cleanup[2] removing marshal # cleanup[2] removing posix # cleanup[2] removing _frozen_importlib_external # cleanup[2] removing time # cleanup[2] removing zipimport # destroy zipimport # cleanup[2] removing _codecs # cleanup[2] removing codecs # cleanup[2] removing encodings.aliases # cleanup[2] removing encodings # destroy encodings # cleanup[2] removing encodings.utf_8 # cleanup[2] removing _signal # cleanup[2] removing _abc # cleanup[2] removing abc # cleanup[2] removing io # cleanup[2] removing __main__ # destroy __main__ # cleanup[2] removing _stat # cleanup[2] removing stat # cleanup[2] removing _collections_abc # destroy _collections_abc # cleanup[2] removing genericpath # cleanup[2] removing posixpath # cleanup[2] removing os.path # cleanup[2] removing os # cleanup[2] removing _sitebuiltins # cleanup[2] removing site # destroy site # destroy _signal # destroy _abc # destroy _sitebuiltins # destroy io # destroy abc # destroy posixpath # destroy _stat # destroy os # destroy stat # destroy genericpath # cleanup[3] wiping encodings.utf_8 # cleanup[3] wiping encodings.aliases # cleanup[3] wiping codecs # cleanup[3] wiping _codecs # cleanup[3] wiping time # cleanup[3] wiping _frozen_importlib_external # cleanup[3] wiping posix # cleanup[3] wiping marshal # cleanup[3] wiping _io # cleanup[3] wiping _weakref # cleanup[3] wiping _warnings # cleanup[3] wiping _thread # cleanup[3] wiping _imp # cleanup[3] wiping _frozen_importlib # destroy _weakref # cleanup[3] wiping sys # cleanup[3] wiping builtins # destroy _thread # destroy posix # destroy _frozen_importlib_external # destroy _imp # destroy io # destroy marshal # destroy time # destroy _warnings # destroy _frozen_importlib # destroy codecs # destroy sys # destroy encodings.aliases # destroy encodings.utf_8 # destroy _codecs # destroy builtins # clear sys.audit hooks /home/atmark #
以上、よろしくお願いいたします。
at_shinya.koga
2023年11月29日 14時49分
アットマークテクノの古賀です。
柳田さん:
>取り急ぎのご返信、ありがとうございます。
あ、いえいえ。
>>'-V' ではなく、'-v' (verbose option) のことでした。
>>
# python3 -v test.py
>>
>>とすると、どうなるでしょうか?
>
>よく確認できておらず申し訳ありませんでした。
>当該プロジェクトに関して、前投稿の手順で課題となるような環境を崩してしまったため、検証用に別の新規プロジェクトをおこし、同様の状況を再現した上で実行しました。
/home/atmark # python3 -v test.py import _frozen_importlib # frozen ... >import 'os' # <class '_frozen_importlib.FrozenImporter'> >import '_sitebuiltins' # <class '_frozen_importlib.FrozenImporter'> >Processing user site-packages >Processing global site-packages >Adding directory: '/usr/lib/python3.11/site-packages' >import 'site' # <class '_frozen_importlib.FrozenImporter'> >Python 3.11.6 (main, Oct 4 2023, 06:22:18) [GCC 12.2.1 20220924] on linux >Type "help", "copyright", "credits" or "license" for more information. >Traceback (most recent call last): > File "/home/atmark/test.py", line 1, in <module> > import serial > File "<frozen importlib._bootstrap>", line 1176, in _find_and_load > File "<frozen importlib._bootstrap>", line 1140, in _find_and_load_unlocked >ModuleNotFoundError: No module named 'serial' ...
ここでエラーしていますので、やはり、/usr/lib/python3.11/site-packages/ に serial/ が存在していない状況だったようです。
それ以上のことは、分かりませんね。ごめんなさい。
さて、昨晩頂いた追加情報についてコメントします。
まず、「そこで、起動したコンテナにpipインストール作業が反映されていないののではと思い、試しに以下の作業をしたところ、エラーは発生しなくなり、スクリプトも回っているだろうことを確認しました。」については、行われた作業内容の正確なところが分からないので、動くようになった原因が分かりません。
ごめんなさい。
考えられるのは、Dockefile を編集して作成なさったコンテナイメージが、ABOS-DE のプロジェクトに紐づいておらず、A6E にインストールした SWU に反映されていなかったのではないか、ということくらいです。
柳田さん(2023年11月28日 19時03分):
>ところで、コンテナ中で念の為pipのバージョンを確認したところ、pip自体そもそもインストールされていないように見えました。
/ # python3 -m pip -V /usr/bin/python3: No module named pip / # pip -V sh: pip: not found
お使いになっていたコンテナには、pip も py3-pyserial もインストールされていない状況だったのでしょうね。SWU でインストールされたコンテナイメージが、どこかで食い違っていたのかも知れません。
>そこで、起動したコンテナにpipインストール作業が反映されていないののではと思い、試しに以下の作業をしたところ、エラーは発生しなくなり、スクリプトも回っているだろうことを確認しました。
>* ABOS-DEの「Generate development swu」で「development.swu」を生成
>* ABOS-web経由でArmadilloに「development.swu」をアップロード
>* ABOS-DEから「App run on Armadillo」を実施(これまではここでimport serialの参照エラーが発生)
>
>ただし、原理や仕組み、正しい対処法が不明です。
>もしなにか心当たりなどありましたら、ご教示いただけないでしょうか?
>今回のようにコンテナ中に新しくパッケージをインストールし、スクリプトをデバッグしたいとなったとき、上記の手順は必要なものでしたでしょうか?
最初の質問で参照していていらした PDF の p74 で説明している通り、コンテナイメージに変更を加える場合は、SWU の生成(「ビルド」)とアップロード・インストール(SWU のインストール)が毎回必要です。
ちなみに、ゲートウェイコンテナのコンテナイメージを生成する Dockerfile では、RUN 行を次のように書いて、py3-pip のインストールと py3-pyserial のインストールを行うようになっています(※RUN 行の記述から、py3-pip と pyserial 以外の部分を削っています):
RUN apk add --no-cache py3-pip \ && pip3 --no-cache-dir install pyserial
以上、直接の回答になっておらず恐縮ですが、何か参考になりましたら幸いです。
yanagida_iwaya
2023年11月29日 17時39分
アットマークテクノ 古賀様
お世話になっております、柳田です。
諸々のご確認、ありがとうございます。
> 最初の質問で参照していていらした PDF の p74 で説明している通り、コンテナイメージに変更を加える場合は、SWU の生成(「ビルド」)とアップロード・インストール(SWU のインストール)が毎回必要です。
申し訳ありません、こちらの表記を見逃しておりまして、インストール作業をスキップしてしまっていました。
Armadillo上のコンテナイメージがpipインストール前の状態で、pipインストール後のスクリプトを動かそうとしていたため、今回の事象が発生していたと思われます。
> ちなみに、ゲートウェイコンテナのコンテナイメージを生成する Dockerfile では、RUN 行を次のように書いて、py3-pip のインストールと py3-pyserial のインストールを行うようになっています(※RUN 行の記述から、py3-pip と pyserial 以外の部分を削っています):
>
> RUN apk add --no-cache py3-pip \ > && pip3 --no-cache-dir install pyserial >
>
> 以上、直接の回答になっておらず恐縮ですが、何か参考になりましたら幸いです。
GWコンテナの表記について共有ありがとうございます。
参考にいたします。
現状として、pySerialインストール済みのコンテナイメージをアップロード・インストールしまして、pythonスクリプト上でUART1、7ともに送受信できていることを確認いたしましたので、本件は一旦クローズとさせてください。
当方のドキュメント見落としでお手数をおかけし、申し訳ありません。
引き続き、何か課題が出ましたらフォーラムにて質問させていただければと思います。
以上、よろしくお願いいたします。
yanagida_iwaya
2023年11月28日 11時55分
追記です。
以下手順でpipによるpySerial導入を試行しましたが、同様のエラーが発生しNGでした。
* packages.txtに「py3-pip」を追加
* Dockerfile Packages処理後に以下追加
RUN python3 -V
RUN pip3 -V
RUN pip3 list
RUN pip3 uninstall serial
RUN python3 -m pip install pyserial
RUN pip3 list
* プロンプト出力でpyserialがインストールできているだろうことを確認(cacheメッセージは省略)
-----------------------------------------------------------
Untagged: localhost/arm32v7/gss_pi:latest
STEP 1: FROM docker.io/arm32v7/alpine:3.18.4
STEP 2: LABEL version="2.0.0"
STEP 3: ARG PRODUCT
STEP 4: COPY resources [r]esources_${PRODUCT} /
STEP 5: ARG PACKAGES
STEP 6: RUN apk update && apk upgrade && apk add ${PACKAGES} && apk cache clean
STEP 7: RUN python3 -V
Python 3.11.6
STEP 8: RUN pip3 -V
pip 23.1.2 from /usr/lib/python3.11/site-packages/pip (python 3.11)
STEP 9: RUN pip3 list
Package Version
---------- -------
packaging 23.1
pip 23.1.2
pyparsing 3.0.9
setuptools 67.7.2
STEP 10: RUN pip3 uninstall serial
WARNING: Skipping serial as it is not installed.
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
STEP 11: RUN python3 -m pip install pyserial
Collecting pyserial
Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.6/90.6 kB 1.5 MB/s eta 0:00:00
Installing collected packages: pyserial
Successfully installed pyserial-3.5
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
STEP 12: RUN pip3 list
Package Version
---------- -------
packaging 23.1
pip 23.1.2
pyparsing 3.0.9
pyserial 3.5
setuptools 67.7.2
-----------------------------------------------------------
* App run on Armadillo実行、VScode TERMINAL上でエラー発生を確認(スクリプトファイル名は仮の名前に置き換えています)
-----------------------------------------------------------
Traceback (most recent call last):
File "/vol_app/src/main.py", line 12, in
import XXXXX as XX
File "/vol_app/src/XXXXX.py", line 6, in
import serial
ModuleNotFoundError: No module named 'serial'
-----------------------------------------------------------
とんちんかんなことをしていれば申し訳ありません…
以上、よろしくお願いいたします。