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.