Manajemen paket¶
Menginstal paket dengan mip¶
Board yang mendukung jaringan menyertakan modul mip, yang dapat menginstal paket dari micropython-lib dan dari situs pihak ketiga (termasuk GitHub, GitLab).
mip ("mip installs packages") mirip dalam konsep dengan alat pip Python, namun tidak menggunakan indeks PyPI, melainkan menggunakan micropython-lib sebagai indeks defaultnya. mip akan secara otomatis mengambil .mpy file yang telah dikompilasi saat mengunduh dari micropython-lib.
Cara paling umum menggunakan mip adalah dari REPL:
>>> import mip
>>> mip.install("pkgname") # Installs the latest version of "pkgname" (and dependencies)
>>> mip.install("pkgname", version="x.y") # Installs version x.y of "pkgname"
>>> mip.install("pkgname", mpy=False) # Installs the source version (i.e. .py rather than .mpy files)
mip akan mendeteksi lokasi yang tepat pada sistem file dengan mencari sys.path untuk entri pertama yang berakhiran /lib. Anda dapat mengganti tujuan menggunakan target, tetapi perhatikan bahwa jalur ini harus ada dalam sys.path agar dapat diimpor setelahnya:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
Selain mengunduh paket dari indeks micropython-lib, mip juga dapat menginstal library pihak ketiga. Cara paling sederhana adalah mengunduh file secara langsung:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
Saat menginstal file secara langsung, argumen target masih didukung untuk mengatur jalur tujuan, tetapi mpy dan version diabaikan.
URL juga dapat dimulai dengan github: atau gitlab: sebagai cara mudah untuk mengarahkan ke konten yang dihost di GitHub atau GitLab:
>>> mip.install("github:org/repo/path/foo.py") # Uses default branch
>>> mip.install("github:org/repo/path/foo.py", version="branch-or-tag") # Optionally specify the branch or tag
>>> mip.install("gitlab:org/repo/path/foo.py") # Uses default branch
>>> mip.install("gitlab:org/repo/path/foo.py", version="branch-or-tag") # Optionally specify the branch or tag
Paket yang lebih canggih (yaitu dengan lebih dari satu file, atau dengan dependensi) dapat diunduh dengan menentukan jalur ke package.json-nya:
>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
>>> mip.install("gitlab:org/user/path/package.json")
Jika tidak ada file json yang ditentukan, maka "package.json" ditambahkan secara implisit:
>>> mip.install("http://example.com/x/")
>>> mip.install("github:org/repo") # Uses default branch of that repo
>>> mip.install("github:org/repo", version="branch-or-tag")
>>> mip.install("gitlab:org/repo") # Uses default branch of that repo
>>> mip.install("gitlab:org/repo", version="branch-or-tag")
Menggunakan mip pada port Unix¶
Pada port Unix, mip dapat digunakan di REPL seperti di atas, dan juga dengan menggunakan -m
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
Argumen --target path, --no-mpy, dan --index dapat diatur:
$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
Menginstal paket dengan mpremote¶
Alat mpremote juga menyertakan fungsionalitas yang sama dengan mip dan dapat digunakan dari PC host untuk menginstal paket ke perangkat yang terhubung secara lokal (misalnya melalui USB atau UART):
$ mpremote mip install pkgname
$ mpremote mip install [email protected]
$ 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
$ mpremote mip install gitlab:org/repo
$ mpremote mip install gitlab:org/repo@branch-or-tag
Argumen --target=path, --no-mpy, dan --index dapat diatur:
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
mpremote juga dapat menginstal paket dari file yang tersimpan di sistem file lokal host:
$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py
Ini sangat berguna untuk menguji paket selama pengembangan dan untuk menginstal paket dari klon lokal repositori GitHub. Perhatikan bahwa URL dalam file package.json harus menggunakan garis miring ke depan ("/") sebagai pemisah direktori, bahkan di Windows, agar kompatibel dengan penginstalan dari web.
Menginstal paket secara manual¶
Paket juga dapat diinstal (dalam bentuk .py maupun .mpy) dengan menyalin file secara manual ke perangkat. Bergantung pada board, ini mungkin dilakukan melalui USB Mass Storage, alat mpremote (misalnya mpremote fs cp path/to/package.py :package.py), webrepl, dll.
Menulis & menerbitkan paket¶
Menerbitkan ke micropython-lib adalah cara termudah untuk membuat paket Anda dapat diakses secara luas oleh pengguna MicroPython, dan tersedia secara otomatis melalui mip dan mpremote serta dikompilasi ke bytecode. Lihat https://github.com/micropython/micropython-lib untuk informasi lebih lanjut.
Untuk menulis paket "self-hosted" yang dapat diunduh oleh mip atau mpremote, Anda memerlukan server web statis (atau GitHub) untuk menghost satu file .py, atau file package.json bersama file-file .py Anda.
Contoh library mlx90640 yang dihost di GitHub dapat diinstal dengan:
$ mpremote mip install github:org/micropython-mlx90640
Tata letak paket di GitHub mungkin terlihat seperti:
https://github.com/org/micropython-mlx90640/
package.json
mlx90640/
__init__.py
utils.py
package.json menentukan lokasi file yang akan diinstal dan dependensi lainnya:
{
"urls": [
["mlx90640/__init__.py", "mlx90640/__init__.py"],
["mlx90640/utils.py", "mlx90640/utils.py"]
],
"deps": [
["collections-defaultdict", "latest"],
["os-path", "latest"],
["github:org/micropython-additions", "main"],
["gitlab:org/micropython-otheradditions", "main"]
],
"version": "0.2"
}
Daftar urls menentukan file yang akan diinstal sesuai dengan:
"urls": [
[destination_path, source_url]
...
di mana destination_path adalah lokasi dan nama file yang akan diinstal pada perangkat dan source_url adalah URL file yang akan diinstal. URL sumber biasanya ditentukan relatif terhadap direktori yang berisi file package.json, tetapi juga bisa berupa URL absolut, misalnya:
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
Paket bergantung pada collections-defaultdict dan os-path yang akan diinstal secara otomatis dari micropython-lib. Dependensi ketiga menginstal konten sebagaimana didefinisikan oleh file package.json dari cabang main repositori GitHub org/micropython-additions.
Membekukan paket¶
Ketika modul atau paket Python diimpor dari sistem file perangkat, ia dikompilasi menjadi bytecode di RAM, siap dieksekusi oleh VM. Untuk .mpy file, konversi ini telah dilakukan sebelumnya, tetapi bytecode tetap berakhir di RAM.
Untuk perangkat dengan memori terbatas, atau untuk aplikasi besar, akan lebih menguntungkan jika menjalankan bytecode dari ROM (yaitu memori flash). Ini dapat dilakukan dengan "membekukan" bytecode ke dalam firmware MicroPython, yang kemudian di-flash ke perangkat. Performa runtime sama (meskipun pengimporan lebih cepat), tetapi dapat membebaskan jumlah RAM yang signifikan untuk digunakan program Anda.
Kelemahan pendekatan ini adalah pengembangannya jauh lebih lambat, karena Anda harus men-flash firmware setiap kali, tetapi tetap berguna untuk membekukan dependensi yang tidak sering berubah.
Pembekuan dilakukan dengan menulis file manifest dan menggunakannya dalam build, sering kali sebagai bagian dari definisi board kustom. Lihat panduan File manifest MicroPython untuk informasi lebih lanjut.