Pakethantering¶
Installera paket med mip¶
Nätverkskapabla kort inkluderar modulen mip, som kan installera paket från micropython-lib och från tredjepartssajter (inklusive GitHub, GitLab).
mip (”mip installs packages”) liknar konceptuellt Pythons pip-verktyg, men det använder inte PyPI-indexet, utan använder i stället micropython-lib som sitt index som standard. mip hämtar automatiskt kompilerad .mpy file vid nedladdning från micropython-lib.
Det vanligaste sättet att använda mip är från 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 upptäcker en lämplig plats i filsystemet genom att söka i sys.path efter den första posten som slutar på /lib. Du kan åsidosätta destinationen med target, men observera att denna sökväg måste finnas i sys.path för att senare kunna importeras:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
Förutom att ladda ner paket från micropython-lib-indexet kan mip även installera tredjepartsbibliotek. Det enklaste sättet är att ladda ner en fil direkt:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
Vid direkt installation av en fil stöds fortfarande argumentet target för att ange destinationssökvägen, men mpy och version ignoreras.
URL:en kan också börja med github: eller gitlab: som ett enkelt sätt att peka på innehåll som finns på GitHub eller 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
Mer avancerade paket (dvs. med fler än en fil, eller med beroenden) kan laddas ner genom att ange sökvägen till deras package.json
>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
>>> mip.install("gitlab:org/user/path/package.json")
Om ingen json-fil anges läggs ”package.json” implicit till:
>>> 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")
Använda mip på Unix-porten¶
På Unix-porten kan mip användas i REPL som ovan, och även genom att använda -m
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
Argumenten --target path, --no-mpy och --index kan ställas in:
$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
Installera paket med mpremote¶
Verktyget mpremote inkluderar också samma funktionalitet som mip och kan användas från en värddator för att installera paket på en lokalt ansluten enhet (t.ex. via USB eller 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
Argumenten --target=path, --no-mpy och --index kan ställas in:
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
mpremote kan också installera paket från filer som lagras på värdens lokala filsystem:
$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py
Detta är särskilt användbart för att testa paket under utveckling och för att installera paket från lokala kloner av GitHub-arkiv. Observera att URL:er i package.json-filer måste använda snedstreck (”/”) som katalogseparatorer, även på Windows, så att de är kompatibla med installation från webben.
Installera paket manuellt¶
Paket kan också installeras (i antingen .py- eller .mpy-form) genom att manuellt kopiera filerna till enheten. Beroende på kortet kan detta ske via USB-masslagring, verktyget mpremote (t.ex. mpremote fs cp path/to/package.py :package.py), webrepl osv.
Skriva och publicera paket¶
Att publicera till micropython-lib är det enklaste sättet att göra ditt paket brett tillgängligt för MicroPython-användare, och det blir automatiskt tillgängligt via mip och mpremote samt kompilerat till bytecode. Se https://github.com/micropython/micropython-lib för mer information.
För att skriva ett ”självhostat” paket som kan laddas ner av mip eller mpremote behöver du en statisk webbserver (eller GitHub) för att hosta antingen en enda .py-fil, eller en package.json-fil tillsammans med dina .py-filer.
Ett exempel på ett mlx90640-bibliotek som finns på GitHub skulle kunna installeras med:
$ mpremote mip install github:org/micropython-mlx90640
Layouten för paketet på GitHub kan se ut så här:
https://github.com/org/micropython-mlx90640/
package.json
mlx90640/
__init__.py
utils.py
package.json anger platsen för filer som ska installeras och andra beroenden:
{
"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"
}
Listan urls anger filerna som ska installeras enligt:
"urls": [
[destination_path, source_url]
...
där destination_path är platsen och namnet på filen som ska installeras på enheten och source_url är URL:en för filen som ska installeras. Käll-URL:en anges vanligtvis relativt katalogen som innehåller package.json-filen, men kan också vara en absolut URL, t.ex.:
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
Paketet är beroende av collections-defaultdict och os-path som installeras automatiskt från micropython-lib. Det tredje beroendet installerar innehållet enligt definitionen i package.json-filen i grenen main i GitHub-arkivet org/micropython-additions.
Frysa paket¶
När en Python-modul eller ett Python-paket importeras från enhetens filsystem kompileras det till bytecode i RAM, redo att exekveras av VM:en. För en .mpy file har denna konvertering redan gjorts, men bytekoden hamnar fortfarande i RAM.
För enheter med lite minne, eller för stora applikationer, kan det vara fördelaktigt att i stället köra bytekoden från ROM (dvs. flashminne). Detta kan göras genom att ”frysa” bytekoden in i MicroPythons fasta programvara, som sedan flashas till enheten. Körtidsprestandan är densamma (även om importen går snabbare), men det kan frigöra betydande mängder RAM för ditt program att använda.
Nackdelen med detta tillvägagångssätt är att det är mycket långsammare att utveckla, eftersom du måste flasha den fasta programvaran varje gång, men det kan ändå vara användbart att frysa beroenden som inte ändras så ofta.
Frysning görs genom att skriva en manifestfil och använda den i bygget, ofta som en del av en anpassad korddefinition. Se guiden MicroPython-manifestfiler för mer information.