パッケージ管理¶
mip
によるパッケージのインストール¶
ネットワークに対応したボードでは micropython-lib および GitHub を含むサードパーティのサイトからパッケージをインストールできる mip
モジュールがあります。
mip
("mip installs packages")は、Python の pip ツールとコンセプトが同じものですが、PyPI インデックスを使わず、デフォルトのインデックスとして micropython-lib を使います。 mip
は micropython-lib からダウンロードする際に、コンパイルされた .mpy ファイル を自動的に取得します。
mip
を使う最も一般的な方法は REPL からです:
>>> import mip
>>> mip.install("pkgname") # "pkgname" (と依存するもの)の最新バージョンをインストール
>>> mip.install("pkgname", version="x.y") # "pkgname" のバージョン x.y をインストール
>>> mip.install("pkgname", mpy=False) # ソース版 (つまり .mpy ではなく .py ファイル)をインストール
mip
は /lib
で終わる最初のエントリを sys.path
から検索することにより、ファイルシステム上のインストール場所を適切に検出します。 target
を使ってインストール場所を上書きすることもできますが、後でインポートできるようにするには上書きしたパスが sys.path
にあるようにしておく必要があります:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
mip
は micropython-lib インデックスからパッケージをダウンロードするだけでなく、サードパーティのライブラリもインストールできます。最も簡単な方法は、直接ファイルをダウンロードすることです:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
ファイルを直接インストールする場合でも target
引数をサポートしていますが、 mpy
と version
引数は無視します。
URL は github:
で始めることもでき、GitHub でホストされたコンテンツを指すための簡単な方法です:
>>> mip.install("github:org/repo/path/foo.py") # デフォルトブランチを使用
>>> mip.install("github:org/repo/path/foo.py", version="branch-or-tag") # ブランチまたはタグを指定するオプション
より複雑なパッケージ(つまり、複数のファイルまたは依存関係を持つパッケージ)は、その package.json
へのパスを指定することでダウンロードできます。
>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
json ファイルが指定されていない場合、 "package.json" が暗黙的に追加されます。
>>> mip.install("http://example.com/x/")
>>> mip.install("github:org/repo") # デフォルトのブランチを使用
>>> mip.install("github:org/repo", version="branch-or-tag")
Unixポートでの mip
の使い方¶
Unix ポートでは上記のように REPL で mip
を使えます。また -m
でも使えます:
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
--target=path
、 --no-mpy
、 --index
引数を指定できます。
$ ./micropython -m mip install --target=third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
mpremote
を使ったパッケージのインストール¶
mpremote ツールには mip
と同様の機能があり、ホストPCからローカルに(USB または UART などで)接続されたデバイスにパッケージをインストールするために使えます:
$ mpremote mip install pkgname
$ mpremote mip install pkgname@x.y
$ mpremote mip install http://example.com/x/y/foo.py
$ mpremote mip install github:org/repo
$ mpremote mip install github:org/repo@branch-or-tag
--target=path
、 --no-mpy
、 --index
引数を指定できます。
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
手動でのパッケージのインストール¶
パッケージのインストールは、(.py または .mpy 形式のいずれかの)ファイルを手動でデバイスにコピーすることでも可能です。ボードによって、USB Mass Storage 、mpremote ツール(たとえば mpremote fs cp path/to/package.py :package.py
)、 webrepl などを介してコピーできます。
パッケージの作成と公開¶
micropython-lib に公開することは、MicroPython ユーザーに広くアクセス可能にする最も簡単な方法であり、 mip
や mpremote
から自動的に利用可能になり、バイトコードにコンパイルされます。詳細については https://github.com/micropython/micropython-lib を参照してください。
mip
または mpremote
からダウンロードできる "self-hosted" パッケージを作成するには、静的Webサーバー(または GitHub)を用意して、単一の .py ファイル、または複数の .py ファイルと一緒にした package.json
ファイルをホストする必要があります。
たとえば mlx90640
ライブラリの典型的な package.json
は次のようになります:
{
"urls": [
["mlx90640/__init__.py", "github:org/micropython-mlx90640/mlx90640/__init__.py"],
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
],
"deps": [
["collections-defaultdict", "latest"],
["os-path", "latest"],
["github:org/micropython-additions", "main"]
],
"version": "0.2"
}
この例では、2つのファイルが GitHubリポジトリ org/micropython-mlx90640
でホストされていて、デバイス上の mlx90640
ディレクトリにインストールされます。依存関係にある collections-defaultdict
と os-path
は micropython-lib から自動的にインストールされます。3つ目の依存関係は、GitHub リポジトリ org/micropython-additions
の main
ブランチの package.json
ファイルで定義されている内容をインストールします。
パッケージの凍結¶
Python のモジュールやパッケージをデバイスのファイルシステムからインポートすると、VMで実行できるように RAM 上で バイトコード にコンパイルされます。 .mpy ファイル の場合、この変換はすでに行われていますが、それでもバイトコードは RAM 上にあります。
小メモリのデバイスや大規模なアプリケーションでは、バイトコードを ROM (フラッシュメモリ)から実行する方が有利です。これは、バイトコードを MicroPython ファームウェアに「凍結」してから、デバイスにフラッシュすることで実現できます。ランタイムパフォーマンスは同じですが(ただし、インポートはより高速です)、プログラムが使う RAM を大幅に解放できます。
このアプローチの欠点は、パッケージを変更たびにファームウェアをフラッシュしなければならないので開発がはるかに遅くなることですが、頻繁に変更されない依存パッケージを凍結することは依然として有用です。
マニフェストファイルを作成して、それをビルドで使うことで、通常はカスタムボード定義の一部として凍結を行います。詳細については MicroPython マニフェストファイル のガイドを参照してください。