Gestionarea pachetelor¶
Instalarea pachetelor cu mip¶
Plăcile cu capabilități de rețea includ modulul mip, care poate instala pachete din micropython-lib și de pe site-uri terțe (inclusiv GitHub, GitLab).
mip („mip installs packages”) este similar conceptual cu instrumentul pip din Python, însă nu folosește indexul PyPI, ci folosește în mod implicit micropython-lib ca index. mip va prelua automat .mpy file compilat la descărcarea din micropython-lib.
Cel mai frecvent mod de a folosi mip este din 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 va detecta o locație potrivită pe sistemul de fișiere căutând în sys.path prima intrare care se termină în /lib. Poți suprascrie destinația folosind target, dar reține că această cale trebuie să fie în sys.path pentru a o putea importa ulterior:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
Pe lângă descărcarea pachetelor din indexul micropython-lib, mip poate de asemenea instala biblioteci terțe. Cel mai simplu mod este descărcarea directă a unui fișier:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
La instalarea directă a unui fișier, argumentul target este în continuare suportat pentru a seta calea de destinație, dar mpy și version sunt ignorate.
URL-ul poate de asemenea începe cu github: sau gitlab: ca mod simplu de a indica spre conținut găzduit pe GitHub sau 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
Pachetele mai sofisticate (adică cu mai mult de un fișier sau cu dependențe) pot fi descărcate specificând calea către package.json al lor:
>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
>>> mip.install("gitlab:org/user/path/package.json")
Dacă nu este specificat niciun fișier json, atunci se adaugă implicit „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")
Folosirea mip pe portul Unix¶
Pe portul Unix, mip poate fi folosit la REPL ca mai sus, precum și folosind -m
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
Argumentele --target path, --no-mpy și --index pot fi setate:
$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
Instalarea pachetelor cu mpremote¶
Instrumentul mpremote include de asemenea aceeași funcționalitate ca mip și poate fi folosit de pe un PC gazdă pentru a instala pachete pe un dispozitiv conectat local (de exemplu prin USB sau 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
Argumentele --target=path, --no-mpy și --index pot fi setate:
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
mpremote poate de asemenea instala pachete din fișiere stocate pe sistemul de fișiere local al gazdei:
$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py
Acest lucru este deosebit de util pentru testarea pachetelor în timpul dezvoltării și pentru instalarea pachetelor din clone locale ale depozitelor GitHub. Reține că URL-urile din fișierele package.json trebuie să folosească bare oblice („/”) ca separatoare de directoare, chiar și pe Windows, astfel încât să fie compatibile cu instalarea de pe web.
Instalarea manuală a pachetelor¶
Pachetele pot fi de asemenea instalate (fie în formă .py, fie .mpy) prin copierea manuală a fișierelor pe dispozitiv. În funcție de placă, acest lucru se poate face prin USB Mass Storage, instrumentul mpremote (de exemplu mpremote fs cp path/to/package.py :package.py), webrepl etc.
Scrierea și publicarea pachetelor¶
Publicarea în micropython-lib este cea mai ușoară modalitate de a face pachetul tău accesibil pe scară largă utilizatorilor MicroPython și disponibil automat prin mip și mpremote și compilat în bytecode. Vezi https://github.com/micropython/micropython-lib pentru mai multe informații.
Pentru a scrie un pachet „auto-găzduit” care poate fi descărcat de mip sau mpremote, ai nevoie de un server web static (sau GitHub) care să găzduiască fie un singur fișier .py, fie un fișier package.json alături de fișierele tale .py.
O bibliotecă mlx90640 de exemplu, găzduită pe GitHub, ar putea fi instalată cu:
$ mpremote mip install github:org/micropython-mlx90640
Aspectul pachetului pe GitHub ar putea arăta astfel:
https://github.com/org/micropython-mlx90640/
package.json
mlx90640/
__init__.py
utils.py
Fișierul package.json specifică locația fișierelor de instalat și alte dependențe:
{
"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"
}
Lista urls specifică fișierele de instalat conform:
"urls": [
[destination_path, source_url]
...
unde destination_path este locația și numele fișierului de instalat pe dispozitiv, iar source_url este URL-ul fișierului de instalat. URL-ul sursă ar fi de obicei specificat relativ la directorul care conține fișierul package.json, dar poate fi de asemenea un URL absolut, de exemplu:
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
Pachetul depinde de collections-defaultdict și os-path, care vor fi instalate automat din micropython-lib. A treia dependență instalează conținutul așa cum este definit de fișierul package.json al ramurii main din depozitul GitHub org/micropython-additions.
Înghețarea pachetelor¶
Atunci când un modul sau pachet Python este importat din sistemul de fișiere al dispozitivului, este compilat în bytecode în RAM, gata de a fi executat de VM. Pentru un .mpy file, această conversie a fost deja realizată, dar bytecode-ul ajunge totuși în RAM.
Pentru dispozitivele cu memorie redusă sau pentru aplicații mari, poate fi avantajos să rulezi în schimb bytecode-ul din ROM (adică memoria flash). Acest lucru se poate face prin „înghețarea” bytecode-ului în firmware-ul MicroPython, care este apoi flash-uit pe dispozitiv. Performanța în timpul execuției este aceeași (deși importul este mai rapid), dar poate elibera cantități semnificative de RAM pe care programul tău să le folosească.
Dezavantajul acestei abordări este că dezvoltarea este mult mai lentă, deoarece trebuie să flash-uiești firmware-ul de fiecare dată, dar poate fi totuși util să îngheți dependențele care nu se schimbă des.
Înghețarea se face prin scrierea unui fișier manifest și folosirea lui în build, adesea ca parte a unei definiții de placă personalizate. Vezi ghidul Fișierele manifest MicroPython pentru mai multe informații.