Paket yönetimi¶
mip ile paket kurma¶
Ağ özellikli kartlar, micropython-lib deposundan ve üçüncü taraf sitelerden (GitHub, GitLab dahil) paket kurabilen mip modülünü içerir.
mip (“mip installs packages”), kavram olarak Python’un pip aracına benzer, ancak PyPI dizinini kullanmaz, bunun yerine varsayılan olarak dizini olarak micropython-lib kullanır. mip, micropython-lib’den indirirken otomatik olarak derlenmiş .mpy file dosyasını getirir.
mip kullanmanın en yaygın yolu REPL üzerindendir:
>>> 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, sys.path içinde /lib ile biten ilk girdiyi arayarak dosya sisteminde uygun bir konum saptar. target kullanarak hedefi geçersiz kılabilirsiniz, ancak bu yolun daha sonra içe aktarılabilmesi için sys.path içinde olması gerektiğini unutmayın:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
mip, micropython-lib dizininden paket indirmenin yanı sıra üçüncü taraf kütüphaneleri de kurabilir. En basit yol, bir dosyayı doğrudan indirmektir:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
Bir dosya doğrudan kurulurken, hedef yolu ayarlamak için target argümanı yine de desteklenir, ancak mpy ve version yok sayılır.
URL, GitHub veya GitLab’da barındırılan içeriğe işaret etmenin basit bir yolu olarak github: veya gitlab: ile de başlayabilir:
>>> 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
Daha gelişmiş paketler (yani birden fazla dosyaya sahip veya bağımlılıkları olan), package.json dosyalarının yolu belirtilerek indirilebilir:
>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
>>> mip.install("gitlab:org/user/path/package.json")
Hiçbir json dosyası belirtilmezse, örtük olarak “package.json” eklenir:
>>> 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")
Unix portunda mip kullanma¶
Unix portunda mip, yukarıdaki gibi REPL üzerinde ve ayrıca -m kullanılarak da kullanılabilir:
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
--target path, --no-mpy ve --index argümanları ayarlanabilir:
$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
mpremote ile paket kurma¶
mpremote aracı da mip ile aynı işlevselliği içerir ve yerel olarak bağlı bir cihaza (örneğin USB veya UART aracılığıyla) paket kurmak için bir ana bilgisayardan kullanılabilir:
$ 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
--target=path, --no-mpy ve --index argümanları ayarlanabilir:
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
mpremote, ana bilgisayarın yerel dosya sisteminde depolanan dosyalardan da paket kurabilir:
$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py
Bu, özellikle geliştirme sırasında paketleri test etmek ve GitHub depolarının yerel kopyalarından paket kurmak için kullanışlıdır. package.json dosyalarındaki URL’lerin, web’den kurulumla uyumlu olmaları için Windows’ta bile dizin ayırıcı olarak eğik çizgi (“/”) kullanması gerektiğini unutmayın.
Paketleri elle kurma¶
Paketler ayrıca (ister .py ister .mpy biçiminde) dosyaları cihaza elle kopyalayarak da kurulabilir. Karta bağlı olarak bu, USB Yığın Depolama, mpremote aracı (örneğin mpremote fs cp path/to/package.py :package.py), webrepl vb. yoluyla olabilir.
Paket yazma ve yayımlama¶
micropython-lib deposuna yayımlamak, paketinizi MicroPython kullanıcıları için yaygın olarak erişilebilir kılmanın en kolay yoludur ve otomatik olarak mip ve mpremote aracılığıyla kullanılabilir ve bytecode’a derlenir. Daha fazla bilgi için https://github.com/micropython/micropython-lib adresine bakın.
mip veya mpremote tarafından indirilebilen “kendi kendine barındırılan” bir paket yazmak için, ya tek bir .py dosyasını ya da .py dosyalarınızın yanında bir package.json dosyasını barındırmak üzere statik bir web sunucusuna (veya GitHub’a) ihtiyacınız vardır.
GitHub’da barındırılan örnek bir mlx90640 kütüphanesi şununla kurulabilir:
$ mpremote mip install github:org/micropython-mlx90640
GitHub’daki paketin düzeni şöyle görünebilir:
https://github.com/org/micropython-mlx90640/
package.json
mlx90640/
__init__.py
utils.py
package.json, kurulacak dosyaların konumunu ve diğer bağımlılıkları belirtir:
{
"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 listesi, kurulacak dosyaları şuna göre belirtir:
"urls": [
[destination_path, source_url]
...
burada destination_path cihaza kurulacak dosyanın konumu ve adı, source_url ise kurulacak dosyanın URL’sidir. Kaynak URL genellikle package.json dosyasını içeren dizine göre belirtilir, ancak mutlak bir URL de olabilir, örneğin:
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
Paket, micropython-lib deposundan otomatik olarak kurulacak olan collections-defaultdict ve os-path paketlerine bağımlıdır. Üçüncü bağımlılık, içeriği org/micropython-additions GitHub deposunun main dalının package.json dosyasında tanımlandığı şekilde kurar.
Paketleri dondurma¶
Bir Python modülü veya paketi cihaz dosya sisteminden içe aktarıldığında, VM tarafından yürütülmeye hazır olarak RAM içinde bytecode biçimine derlenir. Bir .mpy file için bu dönüşüm zaten yapılmıştır, ancak bytecode yine de RAM’de yer alır.
Düşük bellekli cihazlar veya büyük uygulamalar için, bunun yerine bytecode’u ROM’dan (yani flash bellekten) çalıştırmak avantajlı olabilir. Bu, bytecode’u MicroPython aygıt yazılımına “dondurarak” yapılabilir; ardından bu yazılım cihaza flash’lanır. Çalışma zamanı performansı aynıdır (ancak içe aktarma daha hızlıdır), fakat programınızın kullanması için önemli miktarda RAM serbest bırakabilir.
Bu yaklaşımın dezavantajı, her seferinde aygıt yazılımını flash’lamanız gerektiğinden geliştirmenin çok daha yavaş olmasıdır, ancak sık değişmeyen bağımlılıkları dondurmak için yine de yararlı olabilir.
Dondurma, bir manifest dosyası yazılarak ve genellikle özel bir kart tanımının parçası olarak derlemede kullanılarak yapılır. Daha fazla bilgi için MicroPython manifest dosyaları kılavuzuna bakın.