2021-04-16 12:41:58 +00:00
|
|
|
# 0. Contents
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2021-04-16 12:29:45 +00:00
|
|
|
1. [Installing MicroPython library modules](./README.md#1-installing-micropython-library-modules)
|
2021-04-16 12:41:58 +00:00
|
|
|
2. [micropip](./README.md#2-micropip) upip alternative runs on a PC under CPython
|
2021-04-16 12:29:45 +00:00
|
|
|
3. [Overriding built in library modules](./README.md#3-overriding-built-in-library-modules)
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2021-04-16 12:29:45 +00:00
|
|
|
# 1. Installing MicroPython library modules
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2022-01-31 10:44:38 +00:00
|
|
|
There are various forks of MicroPython, consequently libraries on
|
|
|
|
[PyPi](https://pypi.org/) may or may not be compatible with official firmware.
|
|
|
|
This is resolved by official `upip` (and its `micropip` derivative). These
|
|
|
|
first search the official library. Only if no match is found do they install
|
|
|
|
from PyPi. For this and other reasons, `pip` and `pip3` should not be used to
|
|
|
|
install MicroPython libraries. Use of `upip` is detailed in the
|
2019-03-26 09:59:13 +00:00
|
|
|
[official docs](http://docs.micropython.org/en/latest/reference/packages.html).
|
|
|
|
|
2019-06-19 16:03:48 +00:00
|
|
|
Users of non-networked hardware such as the Pyboard 1.x can use `upip` with the
|
|
|
|
Unix build of MicroPython to install a library module to an arbitrary directory
|
|
|
|
on a PC, from where the files and directories can be copied to the target
|
2021-04-16 12:29:45 +00:00
|
|
|
hardware. `upip` and its dependency `upip_utarfile` may be found in the `tools`
|
|
|
|
directory of the source tree. This approach has the drawback of requiring the
|
2021-04-16 12:41:58 +00:00
|
|
|
Unix build, which must be built from source. This may be avoided by using
|
|
|
|
`micropip.py` in this repo which runs under CPython.
|
2021-04-16 12:29:45 +00:00
|
|
|
|
|
|
|
Alternatively libraries may be installed by copying files from the MicroPython
|
2022-01-31 10:44:38 +00:00
|
|
|
[library repository](https://github.com/micropython/micropython-lib) to the
|
|
|
|
target device. However this requires some attention to detail where there are
|
|
|
|
dependencies. Where modules are organised as Python packages the directory
|
|
|
|
structure must be maintained.
|
|
|
|
|
|
|
|
## 1.1 Installing unofficial packages
|
|
|
|
|
|
|
|
PyPi hosts a wide variety of packages targeted at MicroPython. There is no
|
|
|
|
guarantee of their compatibility with the official MicroPython codebase and it
|
|
|
|
seems that some cannot even be downloaded by `upip`: e.g.
|
|
|
|
[this issue](https://github.com/peterhinch/micropython-samples/issues/27)
|
|
|
|
|
|
|
|
## 1.2 What micropip is and is not
|
|
|
|
|
|
|
|
Official `upip` cannot run under CPython. The purpose of `micropip` is to be a
|
|
|
|
straight port of `upip` for those who do not have access to the Unix build of
|
|
|
|
MicroPython. It aims to replicate the functinality of `upip`. Hence requests
|
|
|
|
for enhancements will be rejected. If `upip` is enhanced, I will port those
|
|
|
|
changes to `micropip`. Secondly, if I receive a report that `micropip` cannot
|
|
|
|
download a given unofficial package, I will check whether `upip` succceeds. If
|
|
|
|
`upip` also fails, either the package is faulty or there is a bug in `upip`.
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2021-04-16 12:29:45 +00:00
|
|
|
###### [Main README](../README.md)
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2021-04-16 12:29:45 +00:00
|
|
|
## 2. micropip
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2019-06-19 16:03:48 +00:00
|
|
|
This runs under Python 3.2 or above. Library and user modules are installed to
|
|
|
|
the PC for transfer to the target. It is cross-platform and has been tested
|
|
|
|
under Linux, Windows and OSX.
|
2019-03-26 09:59:13 +00:00
|
|
|
|
|
|
|
Help may be accessed with
|
|
|
|
|
|
|
|
```
|
|
|
|
micropip.py --help
|
|
|
|
```
|
|
|
|
or
|
|
|
|
|
|
|
|
```
|
|
|
|
python3 -m micropip --help
|
|
|
|
```
|
2021-04-16 12:41:58 +00:00
|
|
|
Example invocation line to install the `copy` module to a PC:
|
2019-04-02 17:08:11 +00:00
|
|
|
```
|
2021-04-16 12:41:58 +00:00
|
|
|
$ micropip.py install -p ~/rats micropython-copy
|
2019-04-02 17:08:11 +00:00
|
|
|
```
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2021-04-16 12:41:58 +00:00
|
|
|
###### [Contents](./README.md#0-contents)
|
2019-03-26 09:59:13 +00:00
|
|
|
|
2021-04-16 12:29:45 +00:00
|
|
|
# 3. Overriding built in library modules
|
2019-03-26 09:59:13 +00:00
|
|
|
|
|
|
|
Some firmware builds include library modules as frozen bytecode. On occasion it
|
|
|
|
may be necessary to replace such a module with an updated or modified
|
|
|
|
alternative. The most RAM-efficient solution is to rebuild the firmware with
|
|
|
|
the replacement implemented as frozen bytecode.
|
|
|
|
|
|
|
|
For users not wishing to recompile there is an alternative. The module search
|
|
|
|
order is defined in `sys.path`.
|
|
|
|
|
|
|
|
```
|
|
|
|
>>> import sys
|
|
|
|
>>> sys.path
|
|
|
|
['', '/flash', '/flash/lib']
|
|
|
|
```
|
|
|
|
The `''` entry indicates that frozen modules will be found before those in the
|
|
|
|
filesystem. This may be overridden by issuing:
|
|
|
|
```
|
|
|
|
>>> import sys
|
|
|
|
>>> sys.path.append(sys.path.pop(0))
|
|
|
|
```
|
|
|
|
This has the following outcome:
|
|
|
|
```
|
|
|
|
>>> sys.path
|
|
|
|
['/flash', '/flash/lib', '']
|
|
|
|
```
|
|
|
|
Now modules in the filesystem will be compiled and executed in preference to
|
|
|
|
those frozen as bytecode.
|
|
|
|
|
2021-04-16 12:41:58 +00:00
|
|
|
###### [Contents](./README.md#0-contents)
|
2019-03-26 09:59:13 +00:00
|
|
|
|
|
|
|
###### [Main README](../README.md)
|