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.