前回はmpy-crossツールでmpyファイル化したスクリプトを、ストレージに置いて使ってみました。今回は外部のリポジトリからモジュールをダウンロード&インストールしてみる1回目デス。MicroPythonにもモジュール管理ツールあり、ということで mip 試してみたんですけど手元のESP32版では試行錯誤中、トホホ。
※「MicroPython的午睡」投稿順 Indexはこちら
Thonny IDEのパッケージマネジメント
MicroPythonコードを書くのにありがたく使わせていただいておりますThonny IDEですが、当然のようにGUIのパッケージ・マネージャが含まれております。Manage packagesというメニューから以下のようなウインドウが開きます。以下のようにパッケージの出元は伝統?のPyPIみたいデス。
MicroPython(日本語)ホームページのパッケージ管理
一方、いつもお世話になっておりますMicroPythonの日本語ホームページには以下のパッケージ管理に関する記述があります。
使用するツールは、MicroPython上で走る mip というツールです。フルサイズのPythonの pip に対する mip であると。知らんけど。
またパッケージを持ってくる先は micropython-lib であります。PyPIでないらしいです。
ESP32版での mip
上記の日本語ホームページを読むと、最初から import mipしてmipを使い始めているのです。手元のESP32版でmoduleを列挙すると以下のように mip など含まれておりません。当然、import mipしてもエラーとなります。
しかし、以下のgithubへ行けば、mip を含む micropython-libの者どもが並んでおります。
https://github.com/micropython/micropython-lib/tree/master
上記より、mip 自身のモジュールを探し出してダウンロード、完全手動にてESP32マイコンのローカルストレージの /lib 内に mipというサブディレクトリを掘って格納してみました。
importするとエラーで落ちます。原因は、requestsモジュールなど知らん、というつれないお言葉です。しかし上記のモジュール一覧には、urequestsモジュールは存在します。MicroPythonの場合、頭文字にu付のお名前のモジュールをu無で呼び出せることが多いので、なんで?という感じがしないでもないです。でも、やってみると以下のようにu付のモジュールはimportできますが、u無のお名前ではエラーになります。
そこでエイヤーと mip のソース内で requestsと書いてある部分を urequests と勝手書き換えしてみました(確か3か所くらい。)するとmip内ではエラーが回避できた感じ。
しかし、mip.install(“モジュール名”)などとしてもエラーになります。以下のようにURLをフル記述しても
以下のように OSErrorになります。
どうも mip内部で呼び出しているurequestsモジュール内でエラーが発生しているようです。ここでハタと気づきました。
Thonny IDEはネットワークに接続しているパソコン上で動作しているけど、ESP32マイコン側はWiFiでネットワークに接続してないじゃん!
そうでした、ネットワークに接続していないのにネットワーク上のリソースをダウンロードできるわけないじゃん!ネット接続した上で mip 動かしてみないと。。。また次回ね。
ダウンロードターゲットのfunctoolsを完全手動インストール
functools.py は「小ネタ」でちょっとカッコイイ感じがしたので、インストール実験のお試しにしてます。でもダウンロードしたけど動かんかっただとしまらないです。MicroPython-libから完全手動で functools.py をダウンロード、インストールして動作することを確認しておきます。
同じくテスト用のファイルもダウンロードしましたが、アサーションしているだけで、OKだと何も言わない寂しいものだったので、勝手改造して標準出力に結果を送るようにしてみました。こんな感じ。
reduceしてるみたい。。。