Quản lý gói¶
Cài đặt gói với mip¶
Các board có khả năng kết nối mạng bao gồm mô-đun mip, có thể cài đặt các gói từ micropython-lib và từ các trang web của bên thứ ba (bao gồm GitHub, GitLab).
mip ("mip installs packages") tương tự về khái niệm với công cụ pip của Python, tuy nhiên nó không sử dụng chỉ mục PyPI, mà thay vào đó sử dụng micropython-lib làm chỉ mục mặc định. mip sẽ tự động tải về .mpy file đã biên dịch khi tải xuống từ micropython-lib.
Cách phổ biến nhất để sử dụng mip là từ 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 sẽ phát hiện một vị trí thích hợp trên hệ thống tệp bằng cách tìm kiếm sys.path để tìm mục đầu tiên kết thúc bằng /lib. Bạn có thể ghi đè đích bằng cách sử dụng target, nhưng lưu ý rằng đường dẫn này phải nằm trong sys.path để có thể nhập sau đó:
>>> mip.install("pkgname", target="third-party")
>>> sys.path.append("third-party")
Ngoài việc tải xuống các gói từ chỉ mục micropython-lib, mip cũng có thể cài đặt các thư viện của bên thứ ba. Cách đơn giản nhất là tải trực tiếp một tệp:
>>> mip.install("http://example.com/x/y/foo.py")
>>> mip.install("http://example.com/x/y/foo.mpy")
Khi cài đặt trực tiếp một tệp, đối số target vẫn được hỗ trợ để đặt đường dẫn đích, nhưng mpy và version bị bỏ qua.
URL cũng có thể bắt đầu bằng github: hoặc gitlab: như một cách đơn giản để trỏ đến nội dung được lưu trữ trên GitHub hoặc 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
Các gói phức tạp hơn (tức là có nhiều hơn một tệp, hoặc có các phụ thuộc) có thể được tải xuống bằng cách chỉ định đường dẫn đến package.json của chúng:
>>> mip.install("http://example.com/x/package.json")
>>> mip.install("github:org/user/path/package.json")
>>> mip.install("gitlab:org/user/path/package.json")
Nếu không có tệp json nào được chỉ định, thì "package.json" sẽ được thêm ngầm định:
>>> 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")
Sử dụng mip trên cổng Unix¶
Trên cổng Unix, mip có thể được sử dụng tại REPL như trên, và cũng bằng cách sử dụng -m
$ ./micropython -m mip install pkgname-or-url
$ ./micropython -m mip install pkgname-or-url@version
Các đối số --target path, --no-mpy, và --index có thể được đặt:
$ ./micropython -m mip install --target third-party pkgname
$ ./micropython -m mip install --no-mpy pkgname
$ ./micropython -m mip install --index https://host/pi pkgname
Cài đặt gói với mpremote¶
Công cụ mpremote cũng bao gồm chức năng tương tự như mip và có thể được sử dụng từ máy PC chủ để cài đặt các gói vào thiết bị được kết nối cục bộ (ví dụ qua USB hoặc 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
Các đối số --target=path, --no-mpy, và --index có thể được đặt:
$ mpremote mip install --target=/flash/third-party pkgname
$ mpremote mip install --no-mpy pkgname
$ mpremote mip install --index https://host/pi pkgname
mpremote cũng có thể cài đặt các gói từ các tệp được lưu trữ trên hệ thống tệp cục bộ của máy chủ:
$ mpremote mip install path/to/pkg.py
$ mpremote mip install path/to/app/package.json
$ mpremote mip install \\path\\to\\pkg.py
Điều này đặc biệt hữu ích để kiểm tra các gói trong quá trình phát triển và để cài đặt các gói từ các bản clone cục bộ của kho GitHub. Lưu ý rằng các URL trong tệp package.json phải sử dụng dấu gạch chéo xuôi ("/") làm dấu phân tách thư mục, ngay cả trên Windows, để chúng tương thích với việc cài đặt từ web.
Cài đặt gói thủ công¶
Các gói cũng có thể được cài đặt (ở dạng .py hoặc .mpy) bằng cách sao chép thủ công các tệp vào thiết bị. Tùy thuộc vào board, điều này có thể thực hiện qua USB Mass Storage, công cụ mpremote (ví dụ mpremote fs cp path/to/package.py :package.py), webrepl, v.v.
Viết và xuất bản gói¶
Xuất bản lên micropython-lib là cách dễ nhất để làm cho gói của bạn có thể truy cập rộng rãi đối với người dùng MicroPython, và tự động có sẵn thông qua mip và mpremote và được biên dịch thành bytecode. Xem https://github.com/micropython/micropython-lib để biết thêm thông tin.
Để viết một gói "tự lưu trữ" có thể được tải xuống bởi mip hoặc mpremote, bạn cần một máy chủ web tĩnh (hoặc GitHub) để lưu trữ một tệp .py đơn lẻ, hoặc một tệp package.json cùng với các tệp .py của bạn.
Ví dụ về thư viện mlx90640 được lưu trữ trên GitHub có thể được cài đặt bằng:
$ mpremote mip install github:org/micropython-mlx90640
Cấu trúc của gói trên GitHub có thể trông như sau:
https://github.com/org/micropython-mlx90640/
package.json
mlx90640/
__init__.py
utils.py
package.json chỉ định vị trí của các tệp cần cài đặt và các phụ thuộc khác:
{
"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"
}
Danh sách urls chỉ định các tệp cần cài đặt theo:
"urls": [
[destination_path, source_url]
...
trong đó destination_path là vị trí và tên của tệp cần cài đặt trên thiết bị và source_url là URL của tệp cần cài đặt. URL nguồn thường được chỉ định tương đối so với thư mục chứa tệp package.json, nhưng cũng có thể là URL tuyệt đối, ví dụ:
["mlx90640/utils.py", "github:org/micropython-mlx90640/mlx90640/utils.py"]
Gói phụ thuộc vào collections-defaultdict và os-path, những thứ này sẽ được cài đặt tự động từ micropython-lib. Phụ thuộc thứ ba cài đặt nội dung như được định nghĩa bởi tệp package.json của nhánh main của kho GitHub org/micropython-additions.
Đóng băng gói¶
Khi một mô-đun hoặc gói Python được nhập từ hệ thống tệp của thiết bị, nó được biên dịch thành bytecode trong RAM, sẵn sàng được thực thi bởi VM. Đối với .mpy file, quá trình chuyển đổi này đã được thực hiện rồi, nhưng bytecode vẫn nằm trong RAM.
Đối với các thiết bị có ít bộ nhớ, hoặc cho các ứng dụng lớn, có thể có lợi khi chạy bytecode từ ROM (tức là bộ nhớ flash). Điều này có thể được thực hiện bằng cách "đóng băng" bytecode vào firmware MicroPython, sau đó được nạp vào thiết bị. Hiệu suất thực thi giống nhau (mặc dù việc nhập nhanh hơn), nhưng có thể giải phóng một lượng RAM đáng kể cho chương trình của bạn sử dụng.
Nhược điểm của cách tiếp cận này là việc phát triển chậm hơn nhiều, vì bạn phải nạp lại firmware mỗi lần, nhưng nó vẫn có thể hữu ích để đóng băng các phụ thuộc không thường xuyên thay đổi.
Việc đóng băng được thực hiện bằng cách viết một tệp manifest và sử dụng nó trong quá trình xây dựng, thường là một phần của định nghĩa board tùy chỉnh. Xem hướng dẫn Tệp manifest MicroPython để biết thêm thông tin.