このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

パッケージ管理

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 引数をサポートしていますが、 mpyversion 引数は無視します。

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 ユーザーに広くアクセス可能にする最も簡単な方法であり、 mipmpremote から自動的に利用可能になり、バイトコードにコンパイルされます。詳細については 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-defaultdictos-pathmicropython-lib から自動的にインストールされます。3つ目の依存関係は、GitHub リポジトリ org/micropython-additionsmain ブランチの package.json ファイルで定義されている内容をインストールします。

パッケージの凍結

Python のモジュールやパッケージをデバイスのファイルシステムからインポートすると、VMで実行できるように RAM 上で バイトコード にコンパイルされます。 .mpy ファイル の場合、この変換はすでに行われていますが、それでもバイトコードは RAM 上にあります。

小メモリのデバイスや大規模なアプリケーションでは、バイトコードを ROM (フラッシュメモリ)から実行する方が有利です。これは、バイトコードを MicroPython ファームウェアに「凍結」してから、デバイスにフラッシュすることで実現できます。ランタイムパフォーマンスは同じですが(ただし、インポートはより高速です)、プログラムが使う RAM を大幅に解放できます。

このアプローチの欠点は、パッケージを変更たびにファームウェアをフラッシュしなければならないので開発がはるかに遅くなることですが、頻繁に変更されない依存パッケージを凍結することは依然として有用です。

マニフェストファイルを作成して、それをビルドで使うことで、通常はカスタムボード定義の一部として凍結を行います。詳細については MicroPython マニフェストファイル のガイドを参照してください。