見出し画像

MicroPythonモジュールのフォルダ分け

概要

  • MicroPythonでモジュールを探索するデフォルトのパスを調べる、

  • 探索パスを追加する、

  • 別のフォルダにあるモジュールを読み込む、方法を調査した

構成

  • 以下の画像のようなフォルダ構成にしたい

    • mylibフォルダにに自作のライブラリ(my_mathなど)を格納したい

Thonnyのスクリーンショット


背景

  • モジュールが増えると、探すのが大変になるので、フォルダ分けしたい、

  • サードパーティのモジュールは、別のフォルダに格納したい、

  • などがあり、MicroPythonでモジュールを管理する方法を模索した

環境

  • ESP32 Dev board

  • MicroPython v1.19.1 on 2022-06-18; ESP32 module with ESP32

デフォルトの探索パス

  • モジュールを探す仕組みは、Pythonのsys.pathの仕組みを使っているようだ

  • 筆者のESP32 with MicroPython環境では、デフォルトで、libフォルダが列挙された

  • つまり、デフォルトでもlibフォルダを作って、モジュールを格納すれば、読み込むことができる

>>> import sys
>>> sys.path

['', '.frozen', '/lib']

別のフォルダのモジュールを読み込む方法

方法1:探索パスを追加する

  • append()を使うとモジュールを探索するパスを追加することができる

  • mylibフォルダ以下に、my_add(x, y)関数が入ったmy_math.pyを作成

  • append('/mylib')と指定していると、フォルダのことは一切意識せずに、以下のようにモジュールを読み込むことができる

>>> sys.path.append('/mylib')
>>> sys.path
['', '.frozen', '/lib', '/mylib']  -> /mylibが探索パスに追加された
from my_math import my_add
>>> my_add(1, 2)
3
# my_math.pyファイル (mylibフォルダに格納)

def my_add(x, y):
    return x + y


方法2:別のフォルダのモジュールを読み込む

  • 探索パスは変えずに、別のフォルダからモジュールを読み込むこともできる

  • mylib2フォルダ以下に、my_add2(x, y)関数が入ったmy_math2.pyを作る

  • 以下のようにドットで区切ってモジュールを読み込むすることができる

from mylib2.my_math2 import my_add2
# my_math2.pyファイル(mylib2フォルダに格納)

def my_add2(x, y):
    return x + y


留意事項

  • sys.path.append()によるパスの追加は便利さと裏腹に、弊害もあると思うので、

  • チーム開発で利用ときなどは、チームメンバーに相談した方がよいと思う

    • MicroPythonで中規模な開発やチーム開発はあまりないと思うが念のため

参考にしたサイト

https://forum.micropython.org/viewtopic.php?t=1292

A list of strings that specifies the search path for modules.

https://docs.python.org/3/library/sys.html


この記事が気に入ったらサポートをしてみませんか?