DESK-MX6UL-AN-0004: Using Python for Embedded applications

From DAVE Developer's Wiki
Revision as of 14:47, 13 October 2021 by U0007 (talk | contribs) (Virtual environments)

Jump to: navigation, search
Info Box


200px-Emblem-important.svg.png

This application note has been validated using the kit version in the History table.

History[edit | edit source]

Version Date Development Kit version
1.0.0 Oct 2021 DESK-MX6UL-L 1.0.1

Introduction[edit | edit source]

As found on Python official website, Python is a programming language that lets you work more quickly and integrate your systems more effectively and also Python can be easy to pick up whether you're a first-time programmer or you're experienced with other languages.

These sentences got a real confirmation if you have a look at the IEEE Top Programming Languages 2021 ranking. As you can see in the following picture Python reached the Top of the ranking even more than the native C language used since the beginning in Embedded systems programming:


IEEE Top programming languages 2021 - Embedded


As reported in this article The C/C++ programming languages dominate embedded systems programming, though they have a number of disadvantages. Python, on the other hand, has many strengths that make it a great language for embedded systems.

This application note provides some examples of software packages installation that can be used for building an Industrial IoT Gateway adding python3 libraries to the SBC Lynx platform.

Python on DESK[edit | edit source]

python (i.e. python2) and python3 applications are already present on DESK-MX6UL-L dave-image-devel root file system.

Installing python packages[edit | edit source]

First of all check for the default installed python/pip version in the DESK-MX6UL root file system:

root@desk-mx6ul-axelulite:~# python3 --version
Python 3.5.5
root@desk-mx6ul-axelulite:~# pip
pip     pip2    pip2.7
root@desk-mx6ul-axelulite:~# pip --version
pip 9.0.3 from /usr/lib/python2.7/site-packages (python 2.7)
root@desk-mx6ul-axelulite:~#

This shows that pip3 is not present in the root file system and should be installed: the simpler way is using python3 itself and the provided python script get-pip.py for version 3.5:

root@desk-mx6ul-axelulite:~# python3 get-pip.py
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Collecting pip<21.0
  Downloading pip-20.3.4-py2.py3-none-any.whl (1.5 MB)
     |################################| 1.5 MB 176 kB/s
Collecting wheel
  Downloading wheel-0.37.0-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel, pip
Successfully installed pip-20.3.4 wheel-0.37.0
root@desk-mx6ul-axelulite:~# pip
pip     pip2    pip2.7  pip3    pip3.5
root@desk-mx6ul-axelulite:~#

After the installation, pip3 is the latest version available for Python3 3.5.5:

root@desk-mx6ul-axelulite:~# pip3 --version
pip 20.3.4 from /usr/lib/python3.5/site-packages/pip (python 3.5)
root@desk-mx6ul-axelulite:~# easy3_install --version
setuptools 39.0.0 from /usr/lib/python3.5/site-packages (Python 3.5)
root@desk-mx6ul-axelulite:~#

easy install[edit | edit source]

Even if easy_install tool has been deprecated, it is a useful tool still present in the typical python distributions.

For the purposes of this Application Note, the tool has been used to install some python packages typically used in an Industrial Gateway equipment

In this example, the following packages are installed using easy3_install (easy_install version for python3): pyserial and pymodbus (for bus communications), requests (HTTP library), schema, ssdp:

root@desk-mx6ul-axelulite:~# easy3_install pyserial
Searching for pyserial
Reading https://pypi.python.org/simple/pyserial/
Downloading https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl#sha256=c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0
Best match: pyserial 3.5
Processing pyserial-3.5-py2.py3-none-any.whl
Installing pyserial-3.5-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
writing requirements to /usr/lib/python3.5/site-packages/pyserial-3.5-py3.5.egg/EGG-INFO/requires.txt
Adding pyserial 3.5 to easy-install.pth file
Installing pyserial-miniterm script to /usr/bin
Installing pyserial-ports script to /usr/bin

Installed /usr/lib/python3.5/site-packages/pyserial-3.5-py3.5.egg
Processing dependencies for pyserial
Finished processing dependencies for pyserial
root@desk-mx6ul-axelulite:~# easy3_install pymodbus
Searching for pymodbus
Reading https://pypi.python.org/simple/pymodbus/
Downloading https://files.pythonhosted.org/packages/57/21/6c9b1cade55161444450bdde6e953edb819d984beafee8d4baefa4f0310c/pymodbus-2.5.3rc1-py2.py3-none-any.whl#sha256=e8cbf3594a8dd0f71c287e24d8365e69836c8d22cac5ab288110638fd2b9fda6
Best match: pymodbus 2.5.3rc1
Processing pymodbus-2.5.3rc1-py2.py3-none-any.whl
Installing pymodbus-2.5.3rc1-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
writing requirements to /usr/lib/python3.5/site-packages/pymodbus-2.5.3rc1-py3.5.egg/EGG-INFO/requires.txt
Adding pymodbus 2.5.3rc1 to easy-install.pth file
Installing pymodbus.console script to /usr/bin
Installing pymodbus.server script to /usr/bin

Installed /usr/lib/python3.5/site-packages/pymodbus-2.5.3rc1-py3.5.egg
Processing dependencies for pymodbus
Searching for six>=1.15.0
Reading https://pypi.python.org/simple/six/
Downloading https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl#sha256=8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
Best match: six 1.16.0
Processing six-1.16.0-py2.py3-none-any.whl
Installing six-1.16.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
Adding six 1.16.0 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/six-1.16.0-py3.5.egg
Finished processing dependencies for pymodbus
root@desk-mx6ul-axelulite:~# easy3_install requests
Searching for requests
Reading https://pypi.python.org/simple/requests/
Downloading https://files.pythonhosted.org/packages/92/96/144f70b972a9c0eabbd4391ef93ccd49d0f2747f4f6a2a2738e99e5adc65/requests-2.26.0-py2.py3-none-any.whl#sha256=6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24
Best match: requests 2.26.0
Processing requests-2.26.0-py2.py3-none-any.whl
Installing requests-2.26.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
writing requirements to /usr/lib/python3.5/site-packages/requests-2.26.0-py3.5.egg/EGG-INFO/requires.txt
Adding requests 2.26.0 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/requests-2.26.0-py3.5.egg
Processing dependencies for requests
Searching for urllib3<1.27,>=1.21.1
Reading https://pypi.python.org/simple/urllib3/
Downloading https://files.pythonhosted.org/packages/af/f4/524415c0744552cce7d8bf3669af78e8a069514405ea4fcbd0cc44733744/urllib3-1.26.7-py2.py3-none-any.whl#sha256=c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844
Best match: urllib3 1.26.7
Processing urllib3-1.26.7-py2.py3-none-any.whl
Installing urllib3-1.26.7-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
writing requirements to /usr/lib/python3.5/site-packages/urllib3-1.26.7-py3.5.egg/EGG-INFO/requires.txt
Adding urllib3 1.26.7 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/urllib3-1.26.7-py3.5.egg
Searching for idna<4,>=2.5
Reading https://pypi.python.org/simple/idna/
Downloading https://files.pythonhosted.org/packages/d7/77/ff688d1504cdc4db2a938e2b7b9adee5dd52e34efbd2431051efc9984de9/idna-3.2-py3-none-any.whl#sha256=14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a
Best match: idna 3.2
Processing idna-3.2-py3-none-any.whl
Installing idna-3.2-py3-none-any.whl to /usr/lib/python3.5/site-packages
Adding idna 3.2 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/idna-3.2-py3.5.egg
Searching for charset-normalizer~=2.0.0
Reading https://pypi.python.org/simple/charset-normalizer/
Downloading https://files.pythonhosted.org/packages/3f/65/69e6754102dcd018a0f29e4db673372eb323ee504431125ab6c9109cb21c/charset_normalizer-2.0.6-py3-none-any.whl#sha256=5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6
Best match: charset-normalizer 2.0.6
Processing charset_normalizer-2.0.6-py3-none-any.whl
Installing charset_normalizer-2.0.6-py3-none-any.whl to /usr/lib/python3.5/site-packages
writing requirements to /usr/lib/python3.5/site-packages/charset_normalizer-2.0.6-py3.5.egg/EGG-INFO/requires.txt
Adding charset-normalizer 2.0.6 to easy-install.pth file
Installing normalizer script to /usr/bin

Installed /usr/lib/python3.5/site-packages/charset_normalizer-2.0.6-py3.5.egg
Searching for certifi>=2017.4.17
Reading https://pypi.python.org/simple/certifi/
Downloading https://files.pythonhosted.org/packages/05/1b/0a0dece0e8aa492a6ec9e4ad2fe366b511558cdc73fd3abc82ba7348e875/certifi-2021.5.30-py2.py3-none-any.whl#sha256=50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8
Best match: certifi 2021.5.30
Processing certifi-2021.5.30-py2.py3-none-any.whl
Installing certifi-2021.5.30-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
Adding certifi 2021.5.30 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/certifi-2021.5.30-py3.5.egg
Finished processing dependencies for requests
root@desk-mx6ul-axelulite:~# easy3_install schema
Searching for schema
Reading https://pypi.python.org/simple/schema/
Downloading https://files.pythonhosted.org/packages/c7/64/497632c9dc3c1bc94a92d9cafdc5cbd21d011bb651952765195739129a49/schema-0.7.4-py2.py3-none-any.whl#sha256=cf97e4cd27e203ab6bb35968532de1ed8991bce542a646f0ff1d643629a4945d
Best match: schema 0.7.4
Processing schema-0.7.4-py2.py3-none-any.whl
Installing schema-0.7.4-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
writing requirements to /usr/lib/python3.5/site-packages/schema-0.7.4-py3.5.egg/EGG-INFO/requires.txt
Adding schema 0.7.4 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/schema-0.7.4-py3.5.egg
Processing dependencies for schema
Searching for contextlib2>=0.5.5
Reading https://pypi.python.org/simple/contextlib2/
Downloading https://files.pythonhosted.org/packages/76/56/6d6872f79d14c0cb02f1646cbb4592eef935857c0951a105874b7b62a0c3/contextlib2-21.6.0-py2.py3-none-any.whl#sha256=3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471f
Best match: contextlib2 21.6.0
Processing contextlib2-21.6.0-py2.py3-none-any.whl
Installing contextlib2-21.6.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
Adding contextlib2 21.6.0 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/contextlib2-21.6.0-py3.5.egg
Finished processing dependencies for schema
root@desk-mx6ul-axelulite:~# easy3_install ssdp
Searching for ssdp
Reading https://pypi.python.org/simple/ssdp/
Downloading https://files.pythonhosted.org/packages/1d/04/d761ea63c8cb9e0e8a37cc63df9ec39c8c6a0f77363d131035b694758a5d/ssdp-1.1.0-py2.py3-none-any.whl#sha256=dc91a844e54ba6b1a2f3be4d9a52302027f71719c5eb2c0e6fbd77e67e7343ad
Best match: ssdp 1.1.0
Processing ssdp-1.1.0-py2.py3-none-any.whl
Installing ssdp-1.1.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packages
Adding ssdp 1.1.0 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/ssdp-1.1.0-py3.5.egg
Processing dependencies for ssdp
Finished processing dependencies for ssdp
root@desk-mx6ul-axelulite:~#

Then, add some useful IP packages like nmap or scapy (network packet manipulation):

root@desk-mx6ul-axelulite:~# easy3_install nmap
Searching for nmap
Reading https://pypi.python.org/simple/nmap/
Downloading https://files.pythonhosted.org/packages/f8/6f/6813025bd575ebc771189afaab7c405fdf3f1febaa197525d5aa6fd88ac5/nmap-0.0.1-py3-none-any.whl#sha256=158de16af02043e1a2015662ad1710dfb46dadd2bea8e9d90ba16b78b6650098
Best match: nmap 0.0.1
Processing nmap-0.0.1-py3-none-any.whl
Installing nmap-0.0.1-py3-none-any.whl to /usr/lib/python3.5/site-packages
Adding nmap 0.0.1 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/nmap-0.0.1-py3.5.egg
Processing dependencies for nmap
Finished processing dependencies for nmap
root@desk-mx6ul-axelulite:~# easy3_install scapy
Searching for scapy
Reading https://pypi.python.org/simple/scapy/
Downloading https://files.pythonhosted.org/packages/85/47/c919432ca258f354bb2c1e645623f891603f185bfc7563d4a21f6432e7ed/scapy-2.4.5.tar.gz#sha256=bc707e3604784496b6665a9e5b2a69c36cc9fb032af4864b29051531b24c8593
Best match: scapy 2.4.5
Processing scapy-2.4.5.tar.gz
Writing /tmp/easy_install-vsqq0ans/scapy-2.4.5/setup.cfg
Running scapy-2.4.5/setup.py -q bdist_egg --dist-dir /tmp/easy_install-vsqq0ans/scapy-2.4.5/egg-dist-tmp-nauxdhas
/usr/lib/python3.5/distutils/dist.py:261: UserWarning: Unknown distribution option: 'long_description_content_type'
  warnings.warn(msg)
creating /usr/lib/python3.5/site-packages/scapy-2.4.5-py3.5.egg
Extracting scapy-2.4.5-py3.5.egg to /usr/lib/python3.5/site-packages
Adding scapy 2.4.5 to easy-install.pth file
Installing scapy script to /usr/bin
Installing UTscapy script to /usr/bin

Installed /usr/lib/python3.5/site-packages/scapy-2.4.5-py3.5.egg
Processing dependencies for scapy
Finished processing dependencies for scapy
root@desk-mx6ul-axelulite:~#

and finally an MQTT client like Eclipse paho MQTT is installed too:

root@desk-mx6ul-axelulite:~# easy3_install paho-mqtt
Searching for paho-mqtt
Reading https://pypi.python.org/simple/paho-mqtt/
Downloading https://files.pythonhosted.org/packages/32/d3/6dcb8fd14746fcde6a556f932b5de8bea8fedcb85b3a092e0e986372c0e7/paho-mqtt-1.5.1.tar.gz#sha256=9feb068e822be7b3a116324e01fb6028eb1d66412bf98595ae72698965cb1cae
Best match: paho-mqtt 1.5.1
Processing paho-mqtt-1.5.1.tar.gz
Writing /tmp/easy_install-vkarrpqi/paho-mqtt-1.5.1/setup.cfg
Running paho-mqtt-1.5.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-vkarrpqi/paho-mqtt-1.5.1/egg-dist-tmp-tt8lku70
creating /usr/lib/python3.5/site-packages/paho_mqtt-1.5.1-py3.5.egg
Extracting paho_mqtt-1.5.1-py3.5.egg to /usr/lib/python3.5/site-packages
Adding paho-mqtt 1.5.1 to easy-install.pth file

Installed /usr/lib/python3.5/site-packages/paho_mqtt-1.5.1-py3.5.egg
Processing dependencies for paho-mqtt
Finished processing dependencies for paho-mqtt
root@desk-mx6ul-axelulite:~#

pip[edit | edit source]

On top of that, some web packages are very useful for creating web applications and remotely control/get information from the gateway like bottle (lightweight WSGI micro web-framework):

root@desk-mx6ul-axelulite:~# pip3 install bottle
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Collecting bottle
  Downloading bottle-0.12.19-py3-none-any.whl (89 kB)
     |################################| 89 kB 486 kB/s
Installing collected packages: bottle
Successfully installed bottle-0.12.19
root@desk-mx6ul-axelulite:~#

and JSON framework like ujson:

root@desk-mx6ul-axelulite:~# pip3 install ujson
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Collecting ujson
  Downloading ujson-3.2.0.tar.gz (7.1 MB)
     |################################| 7.1 MB 21 kB/s
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Building wheels for collected packages: ujson
  Building wheel for ujson (PEP 517) ... done
  Created wheel for ujson: filename=ujson-3.2.0-cp35-cp35m-linux_armv7l.whl size=168783 sha256=69ee66de3fdd504505c0b3bd0e6e9b54cc322a93374c50eec92b18077523b3d3
  Stored in directory: /home/root/.cache/pip/wheels/d7/f5/ae/ca9a177378cfd568da6585bf3f10a79d3d577332ef1e3278db
Successfully built ujson
Installing collected packages: ujson
Successfully installed ujson-3.2.0
root@desk-mx6ul-axelulite:~#

check for installed packages and version[edit | edit source]

root@desk-mx6ul-axelulite:~# pip3 list
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Package            Version
------------------ ---------
bottle             0.12.19
certifi            2021.5.30
charset-normalizer 2.0.6
click              6.7
contextlib2        21.6.0
dataclasses        0.8
fastapi            0.68.2
Flask              0.12.2
gpg                1.10.0
idna               3.2
iniparse           0.4
itsdangerous       0.24
Jinja2             2.10
MarkupSafe         1.0
nmap               0.0.1
paho-mqtt          1.5.1
pip                20.3.4
pydantic           1.8.2
pygobject          3.28.1
pymodbus           2.5.3rc1
pyserial           3.5
requests           2.26.0
scapy              2.4.5
schema             0.7.4
setuptools         39.0.0
simplejson         3.13.2
six                1.11.0
ssdp               1.1.0
starlette          0.14.2
typing-extensions  3.10.0.2
ujson              3.2.0
urllib3            1.26.7
Werkzeug           0.14.1
wheel              0.37.0
root@desk-mx6ul-axelulite:~#

DNF[edit | edit source]

A huge list of python packages can be installed in the target using the DNF package manager: the DESK-MX6UL-AN-0003 shows how to install rpm packages in the target from the DAVE's Yocto repository server.

In case of some troubles (which can happens using easy_install or pip), in fact, other packages can be directly installed using dnf from the already built rpm packages built with Yocto.

For example, when non-pure python packages or in case of mismatched versions, it is required to install them from the pre-built images in Yocto, for example flask::

root@desk-mx6ul-axelulite:~# dnf install python3-flask
Last metadata expiration check: 1:46:26 ago on Thu Oct  7 10:35:14 2021.
Dependencies resolved.
================================================================================
 Package                   Arch               Version       Repository     Size
================================================================================
Installing:
 python3-flask             cortexa7hf_neon    0.12.2-r0     cortexa7hf    110 k
Installing dependencies:
 python3-click             cortexa7hf_neon    6.7-r0        cortexa7hf    110 k
 python3-itsdangerous      cortexa7hf_neon    0.24-r0       cortexa7hf     23 k
 python3-jinja2            cortexa7hf_neon    2.10-r0       cortexa7hf    187 k
 python3-markupsafe        cortexa7hf_neon    1.0-r0        cortexa7hf     25 k
 python3-simplejson        cortexa7hf_neon    3.13.2-r0     cortexa7hf     50 k
 python3-werkzeug          cortexa7hf_neon    0.14.1-r0     cortexa7hf    375 k
 python3-werkzeug-tests    cortexa7hf_neon    0.14.1-r0     cortexa7hf     32 k

Transaction Summary
================================================================================
Install  8 Packages

Total download size: 912 k
Installed size: 3.7 M
Is this ok [y/N]: y
Downloading Packages:
(1/8): python3-itsdangerous-0.24-r0.cortexa7hf_ 205 kB/s |  23 kB     00:00
(2/8): python3-flask-0.12.2-r0.cortexa7hf_neon. 358 kB/s | 110 kB     00:00
(3/8): python3-jinja2-2.10-r0.cortexa7hf_neon.r 550 kB/s | 187 kB     00:00
(4/8): python3-click-6.7-r0.cortexa7hf_neon.rpm 227 kB/s | 110 kB     00:00
(5/8): python3-werkzeug-tests-0.14.1-r0.cortexa 445 kB/s |  32 kB     00:00
(6/8): python3-simplejson-3.13.2-r0.cortexa7hf_ 643 kB/s |  50 kB     00:00
(7/8): python3-markupsafe-1.0-r0.cortexa7hf_neo 365 kB/s |  25 kB     00:00
(8/8): python3-werkzeug-0.14.1-r0.cortexa7hf_ne 603 kB/s | 375 kB     00:00
--------------------------------------------------------------------------------
Total                                           934 kB/s | 912 kB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Installing       : python3-werkzeug-0.14.1-r0.cortexa7hf_neon             1/8
  Installing       : python3-werkzeug-tests-0.14.1-r0.cortexa7hf_neon       2/8
  Installing       : python3-markupsafe-1.0-r0.cortexa7hf_neon              3/8
  Installing       : python3-jinja2-2.10-r0.cortexa7hf_neon                 4/8
  Installing       : python3-simplejson-3.13.2-r0.cortexa7hf_neon           5/8
  Installing       : python3-itsdangerous-0.24-r0.cortexa7hf_neon           6/8
  Installing       : python3-click-6.7-r0.cortexa7hf_neon                   7/8
  Installing       : python3-flask-0.12.2-r0.cortexa7hf_neon                8/8
  Verifying        : python3-flask-0.12.2-r0.cortexa7hf_neon                1/8
  Verifying        : python3-click-6.7-r0.cortexa7hf_neon                   2/8
  Verifying        : python3-itsdangerous-0.24-r0.cortexa7hf_neon           3/8
  Verifying        : python3-jinja2-2.10-r0.cortexa7hf_neon                 4/8
  Verifying        : python3-werkzeug-0.14.1-r0.cortexa7hf_neon             5/8
  Verifying        : python3-werkzeug-tests-0.14.1-r0.cortexa7hf_neon       6/8
  Verifying        : python3-simplejson-3.13.2-r0.cortexa7hf_neon           7/8
  Verifying        : python3-markupsafe-1.0-r0.cortexa7hf_neon              8/8

Installed:
  python3-flask.cortexa7hf_neon 0.12.2-r0
  python3-click.cortexa7hf_neon 6.7-r0
  python3-itsdangerous.cortexa7hf_neon 0.24-r0
  python3-jinja2.cortexa7hf_neon 2.10-r0
  python3-markupsafe.cortexa7hf_neon 1.0-r0
  python3-simplejson.cortexa7hf_neon 3.13.2-r0
  python3-werkzeug.cortexa7hf_neon 0.14.1-r0
  python3-werkzeug-tests.cortexa7hf_neon 0.14.1-r0

Complete!
root@desk-mx6ul-axelulite:~#

import packages[edit | edit source]

Finally, after the installation steps, it is possible to import the packages:

root@desk-mx6ul-axelulite:~# python3
Python 3.5.5 (default, Jul 16 2020, 16:11:13)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> import time
>>> import ssl
>>> import nmap
>>> import scapy
>>> import serial
>>> import pymodbus
>>> import schema
>>> import ssdp
>>> import requests
>>> import flask
>>> import bottle
>>> import ujson
>>> import paho
>>>

Virtual environments[edit | edit source]

As explained on python3 12. Virtual Environments and Packages tutorial it is better to "create a virtual environment, a self-contained directory tree that contains a Python installation for a particular version of Python, plus a number of additional packages"

This avoids the problem related to Applications which sometimes need a specific version of a library.

  • for example, create the virtual environment named desk
root@desk-mx6ul-axelulite:~# python3 -m venv desk-env
root@desk-mx6ul-axelulite:~# which pip3
/usr/bin/pip3
root@desk-mx6ul-axelulite:~# 
  • activate the virtual environment
root@desk-mx6ul-axelulite:~# source desk-env/bin/activate
(desk-env) root@desk-mx6ul-axelulite:~# which pip3
/home/root/desk-env/bin/pip3
(desk-env) root@desk-mx6ul-axelulite:~# pip3 list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pip (9.0.1)
setuptools (28.8.0)
You are using pip version 9.0.1, however version 21.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
root@desk-mx6ul-axelulite:~# 
  • update pip3 in the the virtual environment
(desk-env) root@desk-mx6ul-axelulite:~# python3 -m pip install --upgrade pip
Cache entry deserialization failed, entry ignored
Collecting pip
  Cache entry deserialization failed, entry ignored
  Downloading https://files.pythonhosted.org/packages/27/79/8a850fe3496446ff0d584327ae44e7500daf6764ca1a382d2d02789accf7/pip-20.3.4-py2.py3-none-any.whl (1.5MB)
    100% |################################| 1.5MB 56kB/s
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1
Successfully installed pip-20.3.4
You are using pip version 20.3.4, however version 21.3 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
(desk-env) root@desk-mx6ul-axelulite:~# pip3 --version
pip 20.3.4 from /home/root/desk-env/lib/python3.5/site-packages/pip (python 3.5)
(desk-env) root@desk-mx6ul-axelulite:~# pip3 list
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Package    Version
---------- -------
pip        20.3.4
setuptools 28.8.0
(desk-env) root@desk-mx6ul-axelulite:~#

in this way it is possible to install the required packages (with their specific version required) only in this virtual environment (which is different from the root installation):

(desk-env) root@desk-mx6ul-axelulite:~# pip3 install requests==2.25.0
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Collecting requests==2.25.0
  Downloading requests-2.25.0-py2.py3-none-any.whl (61 kB)
     |################################| 61 kB 467 kB/s
Collecting idna<3,>=2.5
  Downloading idna-2.10-py2.py3-none-any.whl (58 kB)
     |################################| 58 kB 598 kB/s
Collecting chardet<4,>=3.0.2
  Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)
     |################################| 133 kB 2.1 MB/s
Collecting certifi>=2017.4.17
  Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
     |################################| 149 kB 2.1 MB/s
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.7-py2.py3-none-any.whl (138 kB)
     |################################| 138 kB 2.1 MB/s
Installing collected packages: urllib3, idna, chardet, certifi, requests
Successfully installed certifi-2021.10.8 chardet-3.0.4 idna-2.10 requests-2.25.0 urllib3-1.26.7
(desk-env) root@desk-mx6ul-axelulite:~# pip3 list
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
Package    Version
---------- ---------
certifi    2021.10.8
chardet    3.0.4
idna       2.10
pip        20.3.4
requests   2.25.0
setuptools 28.8.0
urllib3    1.26.7
(desk-env) root@desk-mx6ul-axelulite:~# deactivate
root@desk-mx6ul-axelulite:~# pip3 list | grep requests
DEPRECATION: Python 3.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3.5 is no longer maintained. pip 21.0 will drop support for Python 3.5 in January 2021. pip 21.0 will remove support for this functionality.
requests           2.26.0
root@desk-mx6ul-axelulite:~#