Pakettien hallinta

Pakettien asentaminen mip-työkalulla

Verkkokykyiset kortit sisältävät mip-moduulin, joka voi asentaa paketteja micropython-lib-kirjastosta ja kolmannen osapuolen sivustoilta (mukaan lukien GitHub ja GitLab).

mip (”mip installs packages”) muistuttaa käsitteeltään Pythonin pip-työkalua, mutta se ei käytä PyPI-indeksiä vaan käyttää oletuksena indeksinään micropython-lib-kirjastoa. mip hakee automaattisesti käännetyn .mpy file -tiedoston ladatessaan micropython-lib-kirjastosta.

Yleisin tapa käyttää mip-työkalua on 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 tunnistaa sopivan sijainnin tiedostojärjestelmästä etsimällä sys.path-listasta ensimmäisen /lib-päätteisen merkinnän. Voit ohittaa kohteen target-argumentilla, mutta huomaa, että tämän polun on oltava sys.path-listassa, jotta sen voi myöhemmin tuoda:

>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")

Pakettien lataamisen micropython-lib-indeksistä lisäksi mip voi asentaa myös kolmannen osapuolen kirjastoja. Yksinkertaisin tapa on ladata tiedosto suoraan:

>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")

Tiedostoa suoraan asennettaessa target-argumentti on edelleen tuettu kohdepolun asettamiseksi, mutta mpy ja version jätetään huomiotta.

URL voi myös alkaa etuliitteellä github: tai gitlab: yksinkertaisena tapana osoittaa GitHubissa tai GitLabissa isännöityyn sisältöön:

>>> 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

Monimutkaisempia paketteja (eli sellaisia, joissa on useampi kuin yksi tiedosto tai riippuvuuksia) voi ladata määrittämällä polun niiden package.json-tiedostoon:

>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
>>> mip.install("gitlab:org/user/path/package.json")

Jos json-tiedostoa ei määritetä, ”package.json” lisätään implisiittisesti:

>>> 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")

mip-työkalun käyttö Unix-portissa

Unix-portissa mip-työkalua voi käyttää REPL:ssä kuten yllä, ja myös valitsimella -m

$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version

Argumentit --target path, --no-mpy ja --index voidaan asettaa:

$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname

Pakettien asentaminen mpremote-työkalulla

Myös mpremote-työkalu sisältää saman toiminnallisuuden kuin mip, ja sitä voidaan käyttää isäntä-PC:ltä pakettien asentamiseen paikallisesti liitettyyn laitteeseen (esim. USB:n tai UART:n kautta):

$ 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

Argumentit --target=path, --no-mpy ja --index voidaan asettaa:

$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname

mpremote voi asentaa paketteja myös isännän paikalliseen tiedostojärjestelmään tallennetuista tiedostoista:

$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py

Tämä on erityisen hyödyllistä pakettien testaamiseen kehityksen aikana ja pakettien asentamiseen GitHub-tietovarastojen paikallisista klooneista. Huomaa, että package.json-tiedostojen URL-osoitteiden on käytettävä kauttaviivoja (”/”) hakemistoerottimina myös Windowsissa, jotta ne ovat yhteensopivia verkosta asentamisen kanssa.

Pakettien asentaminen käsin

Paketteja voi asentaa (joko .py- tai .mpy-muodossa) myös kopioimalla tiedostot laitteeseen käsin. Kortista riippuen tämä voi tapahtua USB-massamuistin, mpremote-työkalun (esim. mpremote fs cp path/to/package.py :package.py), webrepl-yhteyden tms. kautta.

Pakettien kirjoittaminen ja julkaiseminen

Julkaiseminen micropython-lib-kirjastoon on helpoin tapa tehdä paketistasi laajasti MicroPython-käyttäjien saatavilla oleva, ja se on automaattisesti saatavilla mip- ja mpremote-työkalujen kautta sekä bytecode-koodiksi käännettynä. Katso lisätietoja osoitteesta https://github.com/micropython/micropython-lib.

Kirjoittaaksesi ”itse isännöidyn” paketin, jonka mip tai mpremote voi ladata, tarvitset staattisen verkkopalvelimen (tai GitHubin) isännöimään joko yksittäistä .py-tiedostoa tai package.json-tiedostoa .py-tiedostojesi rinnalla.

Esimerkiksi GitHubissa isännöidyn mlx90640-kirjaston voisi asentaa komennolla:

$ mpremote mip install github:org/micropython-mlx90640

Paketin asettelu GitHubissa voisi näyttää tältä:

https://github.com/org/micropython-mlx90640/
    package.json
    mlx90640/
        __init__.py
        utils.py

package.json määrittää asennettavien tiedostojen sijainnin ja muut riippuvuudet:

{
  "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"
}

urls-lista määrittää asennettavat tiedostot seuraavasti:

"urls": [
    [destination_path, source_url]
    ...

missä destination_path on laitteeseen asennettavan tiedoston sijainti ja nimi ja source_url on asennettavan tiedoston URL. Lähde-URL määritetään yleensä suhteessa hakemistoon, joka sisältää package.json-tiedoston, mutta se voi olla myös absoluuttinen URL, esim.:

["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]

Paketti riippuu paketeista collections-defaultdict ja os-path, jotka asennetaan automaattisesti micropython-lib-kirjastosta. Kolmas riippuvuus asentaa sisällön, joka on määritelty GitHub-tietovaraston org/micropython-additions main-haaran package.json-tiedostossa.

Pakettien jäädyttäminen

Kun Python-moduuli tai -paketti tuodaan laitteen tiedostojärjestelmästä, se käännetään bytecode-koodiksi RAM-muistiin valmiina VM:n suoritettavaksi. .mpy file -tiedoston osalta tämä muunnos on jo tehty, mutta bytecode päätyy silti RAM-muistiin.

Vähämuistisissa laitteissa tai suurissa sovelluksissa voi olla edullista suorittaa bytecode sen sijaan ROM-muistista (eli flash-muistista). Tämä tehdään ”jäädyttämällä” bytecode MicroPython-laiteohjelmistoon, joka sitten kirjoitetaan laitteeseen flash-muistiin. Ajonaikainen suorituskyky on sama (joskin tuonti on nopeampaa), mutta se voi vapauttaa merkittäviä määriä RAM-muistia ohjelmasi käyttöön.

Tämän lähestymistavan haittapuolena on, että kehitys on paljon hitaampaa, koska laiteohjelmisto on kirjoitettava flash-muistiin joka kerta, mutta se voi silti olla hyödyllistä harvoin muuttuvien riippuvuuksien jäädyttämiseen.

Jäädyttäminen tehdään kirjoittamalla manifest-tiedosto ja käyttämällä sitä rakennuksessa, usein osana mukautettua kortin määritystä. Katso lisätietoja MicroPython-manifestitiedostot-oppaasta.