Upravljanje paketima¶
Instaliranje paketa pomoću mip¶
Ploče s mrežnim mogućnostima uključuju modul mip, koji može instalirati pakete iz micropython-lib i s web-mjesta trećih strana (uključujući GitHub, GitLab).
mip („mip installs packages”) konceptualno je sličan Python alatu pip, no ne koristi PyPI indeks, već prema zadanim postavkama kao svoj indeks koristi micropython-lib. mip će automatski dohvatiti prevedenu .mpy file pri preuzimanju s micropython-lib.
Najčešći način korištenja mip je iz REPL-a:
>>> 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 će otkriti odgovarajuću lokaciju na datotečnom sustavu pretražujući sys.path za prvim unosom koji završava na /lib. Odredište možete nadjačati pomoću target, ali imajte na umu da ta putanja mora biti u sys.path da biste je naknadno mogli uvesti:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
Osim preuzimanja paketa iz micropython-lib indeksa, mip može instalirati i biblioteke trećih strana. Najjednostavniji način je izravno preuzimanje datoteke:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
Pri izravnom instaliranju datoteke argument target i dalje je podržan za postavljanje odredišne putanje, no mpy i version se zanemaruju.
URL također može započinjati s github: ili gitlab: kao jednostavan način upućivanja na sadržaj smješten na GitHubu ili GitLabu:
>>> 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
Sofisticiraniji paketi (tj. s više od jedne datoteke ili s ovisnostima) mogu se preuzeti navođenjem putanje do njihovog 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")
Ako nijedna json datoteka nije navedena, tada se implicitno dodaje „package.json”:
>>> 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")
Korištenje mip na Unix portu¶
Na Unix portu mip se može koristiti u REPL-u kao gore, a također i pomoću -m
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
Argumenti --target path, --no-mpy i --index mogu se postaviti:
$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
Instaliranje paketa pomoću mpremote¶
Alat mpremote također uključuje istu funkcionalnost kao mip i može se koristiti s domaćinskog računala za instaliranje paketa na lokalno povezani uređaj (npr. putem USB-a ili UART-a):
$ 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
Argumenti --target=path, --no-mpy i --index mogu se postaviti:
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
mpremote također može instalirati pakete iz datoteka pohranjenih na lokalnom datotečnom sustavu domaćina:
$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py
Ovo je posebno korisno za testiranje paketa tijekom razvoja i za instaliranje paketa iz lokalnih klonova GitHub repozitorija. Imajte na umu da URL-ovi u package.json datotekama moraju koristiti kose crte („/”) kao razdjelnike direktorija, čak i na Windowsima, kako bi bili kompatibilni s instaliranjem s weba.
Ručno instaliranje paketa¶
Paketi se također mogu instalirati (u .py ili .mpy obliku) ručnim kopiranjem datoteka na uređaj. Ovisno o ploči, to može biti putem USB masovne pohrane, alata mpremote (npr. mpremote fs cp path/to/package.py :package.py), webrepl itd.
Pisanje i objavljivanje paketa¶
Objavljivanje na micropython-lib najlakši je način da svoj paket učinite široko dostupnim MicroPython korisnicima te ga automatski učinite dostupnim putem mip i mpremote te prevedenim u bytecode. Vidi https://github.com/micropython/micropython-lib za više informacija.
Za pisanje „samostalno hostiranog” paketa koji mip ili mpremote mogu preuzeti, potreban vam je statički web-poslužitelj (ili GitHub) za hostiranje bilo jedne .py datoteke, bilo package.json datoteke uz vaše .py datoteke.
Primjer biblioteke mlx90640 hostirane na GitHubu mogao bi se instalirati pomoću:
$ mpremote mip install github:org/micropython-mlx90640
Raspored paketa na GitHubu mogao bi izgledati ovako:
https://github.com/org/micropython-mlx90640/
package.json
mlx90640/
__init__.py
utils.py
package.json određuje lokaciju datoteka koje treba instalirati i druge ovisnosti:
{
"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"
}
Popis urls određuje datoteke koje treba instalirati prema:
"urls": [
[destination_path, source_url]
...
gdje je destination_path lokacija i naziv datoteke koju treba instalirati na uređaju, a source_url je URL datoteke koju treba instalirati. Izvorni URL obično bi se navodio relativno u odnosu na direktorij koji sadrži package.json datoteku, ali može biti i apsolutni URL, npr.:
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
Paket ovisi o collections-defaultdict i os-path koji će se automatski instalirati iz micropython-lib. Treća ovisnost instalira sadržaj definiran package.json datotekom main grane GitHub repozitorija org/micropython-additions.
Zamrzavanje paketa¶
Kada se Python modul ili paket uveze iz datotečnog sustava uređaja, prevodi se u bytecode u RAM-u, spreman za izvršavanje od strane VM-a. Za .mpy file ta je pretvorba već obavljena, ali bytecode i dalje završava u RAM-u.
Za uređaje s malo memorije ili za velike aplikacije, može biti prednost umjesto toga izvršavati bytecode iz ROM-a (tj. flash memorije). To se može učiniti „zamrzavanjem” bytecodea u MicroPython firmware, koji se zatim flashira na uređaj. Performanse u izvođenju su iste (iako je uvoz brži), ali se time može osloboditi znatna količina RAM-a za korištenje vašeg programa.
Nedostatak ovog pristupa jest da je razvoj puno sporiji, jer morate flashirati firmware svaki put, ali i dalje može biti korisno zamrznuti ovisnosti koje se ne mijenjaju često.
Zamrzavanje se obavlja pisanjem manifest datoteke i njezinim korištenjem u izgradnji, često kao dio prilagođene definicije ploče. Vidi vodič MicroPython manifest datoteke za više informacija.