Difference between revisions of "DESK-MX6UL-AN-0004: Using Python for Embedded applications"

From DAVE Developer's Wiki
Jump to: navigation, search
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
{{InfoBoxTop}}
 
{{InfoBoxTop}}
 
{{AppliesToAXEL ULite AN}}
 
{{AppliesToAXEL ULite AN}}
 +
{{AppliesTo_SBC_Lynx_AN}}
 +
{{AppliesTo_RIALTO_SBC_AN}}
 
{{InfoBoxBottom}}
 
{{InfoBoxBottom}}
  
Line 12: Line 14:
 
!Development Kit version
 
!Development Kit version
 
|-
 
|-
| 1.0.0
+
| {{oldid|14782|1.0.0}}
 
| Oct 2021
 
| Oct 2021
|[[DESK-MX6UL-L/General/Release_Notes#DESK-MX6UL-L_1.0.1|DESK-MX6UL-L 1.0.1]]
+
|{{oldid|14780|DESK-MX6UL-L 1.0.1}}
 +
|-
 +
| 2.0.0
 +
| Apr 2022
 +
|[[DESK-MX6UL-L/General/Release_Notes#DESK-MX6UL-L_3.0.0|DESK-MX6UL-L 3.0.0]]
 
|-
 
|-
 
|}
 
|}
Line 33: Line 39:
  
 
== Python on DESK ==
 
== Python on DESK ==
<code>python</code> and <code>python3</code> applications are already present on [[DESK-MX6UL-L/Development/Building_the_Yocto_BSP#Quick_reference | DESK-MX6UL-L]] <code>dave-image-devel</code> root file system.
+
<code>python3</code> application is already present on [[DESK-MX6UL-L/Development/Building_the_Yocto_BSP#Quick_reference | DESK-MX6UL-L]] <code>dave-image-devel</code> root file system.
 
 
Moreover, a huge list of ''python'' packages can be installed in the target using the [https://en.wikipedia.org/wiki/DNF_(software) DNF] package manager: the [[DESK-MX6UL-AN-0003:_Package_Management_with_Yocto_and_DNF | DESK-MX6UL-AN-0003]] shows how to install ''rpm'' packages in the target from the [http://yocto.dave.eu/desk-mx6ul-l-1.0.1/ DAVE's Yocto repository server].
 
  
 
== Installing python packages ==
 
== Installing python packages ==
Line 41: Line 45:
  
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# python3 --version
+
root@desk-mx6ul-lynx:~# python3 --version
Python 3.5.5
+
Python 3.9.4
root@desk-mx6ul-axelulite:~# pip
+
root@desk-mx6ul-lynx:~#  
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:~#
 
 
</pre>
 
</pre>
  
This shows that <code>pip3</code> is not present in the root file system and should be installed: the simpler way is using python3 itself and the provided python script [https://bootstrap.pypa.io/pip/3.5/get-pip.py get-pip.py] for version 3.5:
+
<code>pip3</code> is not present - ''by default'' - on standard root file system, but can be easily installed using python:
  
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# python3 get-pip.py
+
root@desk-mx6ul-lynx:~# curl https://bootstrap.pypa.io/get-pip.py -o 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.
+
  % Total    % Received % Xferd  Average Speed  Time    Time    Time  Current
Collecting pip<21.0
+
                                Dload  Upload  Total  Spent    Left  Speed
   Downloading pip-20.3.4-py2.py3-none-any.whl (1.5 MB)
+
  0:00:01 --:--:-- 1846k
     |################################| 1.5 MB 176 kB/s
+
root@desk-mx6ul-lynx:~# python3 get-pip.py
 +
Collecting pip
 +
   Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)
 +
     |################| 1.7 MB 2.1 MB/s           
 +
Collecting setuptools
 +
  Downloading setuptools-60.5.0-py3-none-any.whl (958 kB)
 +
    |###########| 958 kB 2.1 MB/s          
 
Collecting wheel
 
Collecting wheel
   Downloading wheel-0.37.0-py2.py3-none-any.whl (35 kB)
+
   Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel, pip
+
Installing collected packages: wheel, setuptools, pip
Successfully installed pip-20.3.4 wheel-0.37.0
+
Successfully installed pip-21.3.1 setuptools-60.5.0 wheel-0.37.1
root@desk-mx6ul-axelulite:~# pip
+
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
pip    pip2    pip2.7  pip3    pip3.5
+
root@desk-mx6ul-lynx:~#  
root@desk-mx6ul-axelulite:~#
 
 
</pre>
 
</pre>
  
After the installation, <code>pip3</code> is the latest version available for '''Python3 3.5.5''':
+
After the installation, <code>pip3</code> is the latest version available for '''Python3 3.9.4''':
  
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# pip3 --version
+
root@desk-mx6ul-lynx:~# pip3 --version
pip 20.3.4 from /usr/lib/python3.5/site-packages/pip (python 3.5)
+
pip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)
root@desk-mx6ul-axelulite:~# easy3_install --version
+
root@desk-mx6ul-lynx:~#  
setuptools 39.0.0 from /usr/lib/python3.5/site-packages (Python 3.5)
 
root@desk-mx6ul-axelulite:~#
 
 
</pre>
 
</pre>
  
=== easy install===
+
== Virtual environments ==
Even if <code>easy_install</code> tool [https://setuptools.pypa.io/en/latest/deprecated/easy_install.html has been deprecated], it is a useful tool still present in the typical python distributions.
+
As explained on [https://docs.python.org/3/tutorial/venv.html 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"''
  
For the purposes of this Application Note, the tool has been used to install some python packages typically used in an Industrial Gateway equipment
+
This avoids the problem related to Applications that sometimes need a specific version of a library. In this way it is possible to install the required packages (with their specific version required) only in this ''virtual environment'' (which may differ from the ''root'' installation).
 
 
In this example, the following packages are installed using <code>easy3_install</code> (''easy_install'' version for python3): '''pyserial''' and '''pymodbus''' (for bus communications), '''[https://docs.python-requests.org/en/latest/ requests]''' (HTTP library), '''schema''', '''ssdp''':
 
  
 +
* for example, create the <code>virtual environment</code> named '''desk'''
 +
<pre class="board-terminal">
 +
root@desk-mx6ul-lynx:~# python3 -m venv desk-env
 +
root@desk-mx6ul-lynx:~# which pip3
 +
/usr/bin/pip3
 +
root@desk-mx6ul-lynx:~#
 +
</pre>
 +
* activate the <code>virtual environment</code>
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# easy3_install pyserial
+
root@desk-mx6ul-lynx:~# source desk-env/bin/activate
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:~#
 
 
</pre>
 
</pre>
 
+
* check and update ''pip3'' in the the <code>virtual environment</code>
Then, add some useful IP packages like '''nmap''' or '''[https://scapy.readthedocs.io/en/latest/ scapy]''' (network packet manipulation):
 
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# easy3_install nmap
+
(desk-env) root@desk-mx6ul-lynx:~# which pip3
Searching for nmap
+
/home/root/desk-env/bin/pip3
Reading https://pypi.python.org/simple/nmap/
+
(desk-env) root@desk-mx6ul-lynx:~# python3 -m pip install --upgrade pip
Downloading https://files.pythonhosted.org/packages/f8/6f/6813025bd575ebc771189afaab7c405fdf3f1febaa197525d5aa6fd88ac5/nmap-0.0.1-py3-none-any.whl#sha256=158de16af02043e1a2015662ad1710dfb46dadd2bea8e9d90ba16b78b6650098
+
Collecting pip
Best match: nmap 0.0.1
+
  Using cached pip-21.3.1-py3-none-any.whl (1.7 MB)
Processing nmap-0.0.1-py3-none-any.whl
+
Installing collected packages: pip
Installing nmap-0.0.1-py3-none-any.whl to /usr/lib/python3.5/site-packages
+
  Attempting uninstall: pip
Adding nmap 0.0.1 to easy-install.pth file
+
    Found existing installation: pip 20.2.3
 +
    Uninstalling pip-20.2.3:
 +
      Successfully uninstalled pip-20.2.3
 +
Successfully installed pip-21.3.1
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 --version
 +
pip 21.3.1 from /home/root/desk-env/lib/python3.9/site-packages/pip (python 3.9)
 +
(desk-env) root@desk-mx6ul-lynx:~#
 +
</pre>
  
Installed /usr/lib/python3.5/site-packages/nmap-0.0.1-py3.5.egg
+
* <code>setuptools</code> can be upgraded too:
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
+
<pre class="board-terminal">
Processing dependencies for scapy
+
(desk-env) root@desk-mx6ul-lynx:~# pip3 install --upgrade setuptools
Finished processing dependencies for scapy
+
Requirement already satisfied: setuptools in ./desk-env/lib/python3.9/site-packages (49.2.1)
root@desk-mx6ul-axelulite:~#
+
Collecting setuptools
 +
  Using cached setuptools-60.5.0-py3-none-any.whl (958 kB)
 +
Installing collected packages: setuptools
 +
  Attempting uninstall: setuptools
 +
    Found existing installation: setuptools 49.2.1
 +
    Uninstalling setuptools-49.2.1:
 +
      Successfully uninstalled setuptools-49.2.1
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed setuptools-60.5.0
 +
(desk-env) root@desk-mx6ul-lynx:~#  
 
</pre>
 
</pre>
  
and finally an MQTT client like [http://www.eclipse.org/paho/ Eclipse paho MQTT] is installed too:
+
Afterword, the [https://pypi.org/project/wheel/ wheel] package is worth to be installed for further package installation:
 
 
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# easy3_install paho-mqtt
+
(desk-env) root@desk-mx6ul-lynx:~# pip3 install wheel
Searching for paho-mqtt
+
Collecting wheel
Reading https://pypi.python.org/simple/paho-mqtt/
+
  Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB)
Downloading https://files.pythonhosted.org/packages/32/d3/6dcb8fd14746fcde6a556f932b5de8bea8fedcb85b3a092e0e986372c0e7/paho-mqtt-1.5.1.tar.gz#sha256=9feb068e822be7b3a116324e01fb6028eb1d66412bf98595ae72698965cb1cae
+
Installing collected packages: wheel
Best match: paho-mqtt 1.5.1
+
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
Processing paho-mqtt-1.5.1.tar.gz
+
  distutils: /home/root/desk-env/lib/python3.9/site-packages
Writing /tmp/easy_install-vkarrpqi/paho-mqtt-1.5.1/setup.cfg
+
  sysconfig: /usr/lib/python3.9/site-packages
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
+
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
creating /usr/lib/python3.5/site-packages/paho_mqtt-1.5.1-py3.5.egg
+
  distutils: /home/root/desk-env/lib/python3.9/site-packages
Extracting paho_mqtt-1.5.1-py3.5.egg to /usr/lib/python3.5/site-packages
+
  sysconfig: /usr/lib/python3.9/site-packages
Adding paho-mqtt 1.5.1 to easy-install.pth file
+
  WARNING: Additional context:
 
+
  user = False
Installed /usr/lib/python3.5/site-packages/paho_mqtt-1.5.1-py3.5.egg
+
  home = None
Processing dependencies for paho-mqtt
+
  root = None
Finished processing dependencies for paho-mqtt
+
  prefix = None
root@desk-mx6ul-axelulite:~#
+
Successfully installed wheel-0.37.1
 +
(desk-env) root@desk-mx6ul-lynx:~#
 
</pre>
 
</pre>
  
=== pip ===
+
=== pip package installation===
 +
For the purposes of this Application Note, <code>pip3</code> has been used to install some python packages typically used in an Industrial Gateway equipment
  
On top of that, some web packages are very useful for creating web applications and remotely control/get information from the gateway like '''[https://bottlepy.org/docs/dev/ bottle]''' (lightweight WSGI micro web-framework):
+
In this example, the following packages are installed '''pyserial''' and '''pymodbus''' (for bus communications), '''[https://flask.palletsprojects.com/en/2.0.x/ flask]''', '''[https://fastapi.tiangolo.com/ fastapi]''' (web framework), '''[https://bottlepy.org/docs/dev/ bottle]''' (lightweight WSGI micro web-framework), '''[https://docs.python-requests.org/en/latest/ requests]''' (HTTP library), '''schema''', '''ssdp''', '''[https://scapy.readthedocs.io/en/latest/ scapy]''' (network packet manipulation), '''nmap''', '''[https://pypi.org/project/ujson/ ujson]''' (JSON framework):  
  
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# pip3 install bottle
+
(desk-env) root@desk-mx6ul-lynx:~# pip3 install pyserial
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 pyserial
 +
  Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB)
 +
    Collecting fastapi
 +
  Downloading fastapi-0.72.0-py3-none-any.whl (52 kB)
 +
    |████████████████████████████████| 52 kB 77 kB/s
 +
Collecting pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2
 +
  Downloading pydantic-1.9.0-py3-none-any.whl (140 kB)
 +
    |████████████████████████████████| 140 kB 2.1 MB/s
 +
Collecting starlette==0.17.1
 +
  Downloading starlette-0.17.1-py3-none-any.whl (58 kB)
 +
    |████████████████████████████████| 58 kB 619 kB/s
 +
Collecting anyio<4,>=3.0.0
 +
  Downloading anyio-3.5.0-py3-none-any.whl (79 kB)
 +
    |████████████████████████████████| 79 kB 797 kB/s
 +
Collecting typing-extensions>=3.7.4.3
 +
  Downloading typing_extensions-4.0.1-py3-none-any.whl (22 kB)
 +
Collecting sniffio>=1.1
 +
  Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)
 +
Collecting idna>=2.8
 +
  Downloading idna-3.3-py3-none-any.whl (61 kB)
 +
    |████████████████████████████████| 90 kB 780 kB/s           
 +
Installing collected packages: pyserial
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed pyserial-3.5
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install pymodbus
 +
Collecting pymodbus
 +
  Downloading pymodbus-2.5.3-py2.py3-none-any.whl (154 kB)
 +
    |████████████████████████████████| 154 kB 1.5 MB/s           
 +
Collecting six>=1.15.0
 +
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
 +
Requirement already satisfied: pyserial>=3.4 in ./desk-env/lib/python3.9/site-packages (from pymodbus) (3.5)
 +
Installing collected packages: six, pymodbus
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed pymodbus-2.5.3 six-1.16.0
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install flask
 +
Collecting flask
 +
  Downloading Flask-2.0.2-py3-none-any.whl (95 kB)
 +
    |████████████████████████████████| 95 kB 422 kB/s
 +
Collecting Werkzeug>=2.0
 +
  Downloading Werkzeug-2.0.2-py3-none-any.whl (288 kB)
 +
    |████████████████████████████████| 288 kB 2.1 MB/s
 +
Collecting itsdangerous>=2.0
 +
  Downloading itsdangerous-2.0.1-py3-none-any.whl (18 kB)
 +
Collecting click>=7.1.2
 +
  Downloading click-8.0.3-py3-none-any.whl (97 kB)
 +
    |████████████████████████████████| 97 kB 226 kB/s
 +
Collecting Jinja2>=3.0
 +
  Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB)
 +
    |████████████████████████████████| 133 kB 2.1 MB/s
 +
Collecting MarkupSafe>=2.0
 +
  Downloading MarkupSafe-2.0.1.tar.gz (18 kB)
 +
  Preparing metadata (setup.py) ... done
 +
Building wheels for collected packages: MarkupSafe
 +
  Building wheel for MarkupSafe (setup.py) ... done
 +
  Created wheel for MarkupSafe: filename=MarkupSafe-2.0.1-cp39-cp39-linux_armv7l.whl size=25720 sha256=4fa273af41ed51d0614beb76603162148fd15472aa0eb8c1c28a9c18ed137031
 +
  Stored in directory: /home/root/.cache/pip/wheels/9f/6d/c8/1f59b07cf85ae842908006ec28f4477f7e4578df72c3eb0e46
 +
Successfully built MarkupSafe
 +
Installing collected packages: MarkupSafe, Werkzeug, Jinja2, itsdangerous, click, flask
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed Jinja2-3.0.3 MarkupSafe-2.0.1 Werkzeug-2.0.2 click-8.0.3 flask-2.0.2 itsdangerous-2.0.1
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install fastapi
 +
Collecting fastapi
 +
  Downloading fastapi-0.72.0-py3-none-any.whl (52 kB)
 +
    |████████████████████████████████| 52 kB 77 kB/s
 +
Collecting pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2
 +
  Downloading pydantic-1.9.0-py3-none-any.whl (140 kB)
 +
    |████████████████████████████████| 140 kB 2.1 MB/s
 +
Collecting starlette==0.17.1
 +
  Downloading starlette-0.17.1-py3-none-any.whl (58 kB)
 +
    |████████████████████████████████| 58 kB 619 kB/s
 +
Collecting anyio<4,>=3.0.0
 +
  Downloading anyio-3.5.0-py3-none-any.whl (79 kB)
 +
    |████████████████████████████████| 79 kB 797 kB/s
 +
Collecting typing-extensions>=3.7.4.3
 +
  Downloading typing_extensions-4.0.1-py3-none-any.whl (22 kB)
 +
Collecting sniffio>=1.1
 +
  Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)
 +
Collecting idna>=2.8
 +
  Downloading idna-3.3-py3-none-any.whl (61 kB)
 +
    |████████████████████████████████| 61 kB 770 kB/s
 +
Installing collected packages: sniffio, idna, typing-extensions, anyio, starlette, pydantic, fastapi
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed anyio-3.5.0 fastapi-0.72.0 idna-3.3 pydantic-1.9.0 sniffio-1.2.0 starlette-0.17.1 typing-extensions-4.0.1
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install bottle
 
Collecting bottle
 
Collecting bottle
 
   Downloading bottle-0.12.19-py3-none-any.whl (89 kB)
 
   Downloading bottle-0.12.19-py3-none-any.whl (89 kB)
     |################################| 89 kB 486 kB/s
+
     |████████████████████████████████| 89 kB 724 kB/s
 
Installing collected packages: bottle
 
Installing collected packages: bottle
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 
Successfully installed bottle-0.12.19
 
Successfully installed bottle-0.12.19
root@desk-mx6ul-axelulite:~#
+
(desk-env) root@desk-mx6ul-lynx:~# pip3 install requests
</pre>
+
Collecting requests
 
+
  Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
and JSON framework like '''[https://pypi.org/project/ujson/ ujson]''':
+
    |████████████████████████████████| 63 kB 141 kB/s
 
+
Requirement already satisfied: idna<4,>=2.5 in ./desk-env/lib/python3.9/site-packages (from requests) (3.3)
<pre class="board-terminal">
+
Collecting charset-normalizer~=2.0.0
root@desk-mx6ul-axelulite:~# pip3 install ujson
+
  Downloading charset_normalizer-2.0.10-py3-none-any.whl (39 kB)
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 certifi>=2017.4.17
 +
  Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
 +
    |████████████████████████████████| 149 kB 2.2 MB/s
 +
Collecting urllib3<1.27,>=1.21.1
 +
  Downloading urllib3-1.26.8-py2.py3-none-any.whl (138 kB)
 +
    |████████████████████████████████| 138 kB 2.2 MB/s
 +
Installing collected packages: urllib3, charset-normalizer, certifi, requests
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed certifi-2021.10.8 charset-normalizer-2.0.10 requests-2.27.1 urllib3-1.26.8
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install schema
 +
Collecting schema
 +
  Downloading schema-0.7.5-py2.py3-none-any.whl (17 kB)
 +
Collecting contextlib2>=0.5.5
 +
  Downloading contextlib2-21.6.0-py2.py3-none-any.whl (13 kB)
 +
Installing collected packages: contextlib2, schema
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed contextlib2-21.6.0 schema-0.7.5
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install ssdp
 +
Collecting ssdp
 +
  Downloading ssdp-1.1.0-py2.py3-none-any.whl (4.3 kB)
 +
Installing collected packages: ssdp
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed ssdp-1.1.0
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install scapy
 +
Collecting scapy
 +
  Downloading scapy-2.4.5.tar.gz (1.1 MB)
 +
    |████████████████████████████████| 1.1 MB 1.4 MB/s
 +
  Preparing metadata (setup.py) ... done
 +
Building wheels for collected packages: scapy
 +
  Building wheel for scapy (setup.py) ... done
 +
  Created wheel for scapy: filename=scapy-2.4.5-py2.py3-none-any.whl size=1261555 sha256=df65309a4f5e0ee8e9f5da16f5b22b41c5a3d0ab03d671f788451874deeca183
 +
  Stored in directory: /home/root/.cache/pip/wheels/c8/9b/2f/012f0dbaf869afac8be52d4423f34eaa0b6c5c2d1292e40ebd
 +
Successfully built scapy
 +
Installing collected packages: scapy
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed scapy-2.4.5
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install nmap
 +
Collecting nmap
 +
  Downloading nmap-0.0.1-py3-none-any.whl (2.7 kB)
 +
Installing collected packages: nmap
 +
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed nmap-0.0.1
 +
(desk-env) root@desk-mx6ul-lynx:~# pip3 install ujson
 
Collecting ujson
 
Collecting ujson
   Downloading ujson-3.2.0.tar.gz (7.1 MB)
+
   Downloading ujson-5.1.0.tar.gz (7.1 MB)
     |################################| 7.1 MB 21 kB/s
+
     |████████████████████████████████| 7.1 MB 10 kB/s
 +
  WARNING: Value for prefixed-purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /tmp/pip-build-env-y3_ib386/normal/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for prefixed-platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /tmp/pip-build-env-y3_ib386/normal/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = '/tmp/pip-build-env-y3_ib386/normal'
 +
  WARNING: Value for prefixed-purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /tmp/pip-build-env-y3_ib386/overlay/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for prefixed-platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /tmp/pip-build-env-y3_ib386/overlay/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = '/tmp/pip-build-env-y3_ib386/overlay'
 +
  WARNING: Value for purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
  WARNING: Value for platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 
   Installing build dependencies ... done
 
   Installing build dependencies ... done
 
   Getting requirements to build wheel ... done
 
   Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
+
  Preparing metadata (pyproject.toml) ... done
 
Building wheels for collected packages: ujson
 
Building wheels for collected packages: ujson
   Building wheel for ujson (PEP 517) ... done
+
   Building wheel for ujson (pyproject.toml) ... done
   Created wheel for ujson: filename=ujson-3.2.0-cp35-cp35m-linux_armv7l.whl size=168783 sha256=69ee66de3fdd504505c0b3bd0e6e9b54cc322a93374c50eec92b18077523b3d3
+
   Created wheel for ujson: filename=ujson-5.1.0-cp39-cp39-linux_armv7l.whl size=37764 sha256=adb6cfae7a4edcd38706c5b910adeee4549af56433bbe17eed89b08f77dd25aa
   Stored in directory: /home/root/.cache/pip/wheels/d7/f5/ae/ca9a177378cfd568da6585bf3f10a79d3d577332ef1e3278db
+
   Stored in directory: /home/root/.cache/pip/wheels/5b/11/cb/2e1acde83fd78adc6581984c55442e63d7595711b0b62d8110
 
Successfully built ujson
 
Successfully built ujson
 
Installing collected packages: ujson
 
Installing collected packages: ujson
Successfully installed ujson-3.2.0
+
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
root@desk-mx6ul-axelulite:~#
+
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
 +
  distutils: /home/root/desk-env/lib/python3.9/site-packages
 +
  sysconfig: /usr/lib/python3.9/site-packages
 +
  WARNING: Additional context:
 +
  user = False
 +
  home = None
 +
  root = None
 +
  prefix = None
 +
Successfully installed ujson-5.1.0
 +
(desk-env) root@desk-mx6ul-lynx:~#
 
</pre>
 
</pre>
 
+
=== check for installed packages and version ===
==== check for installed packages and version ====
 
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# pip3 list
+
(desk-env) root@desk-mx6ul-lynx:~# 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
 
Package            Version
 
------------------ ---------
 
------------------ ---------
 +
anyio              3.5.0
 
bottle            0.12.19
 
bottle            0.12.19
certifi            2021.5.30
+
certifi            2021.10.8
charset-normalizer 2.0.6
+
charset-normalizer 2.0.10
click              6.7
+
click              8.0.3
 
contextlib2        21.6.0
 
contextlib2        21.6.0
dataclasses        0.8
+
fastapi            0.72.0
fastapi            0.68.2
+
Flask              2.0.2
Flask              0.12.2
+
idna              3.3
gpg                1.10.0
+
itsdangerous      2.0.1
idna              3.2
+
Jinja2            3.0.3
iniparse          0.4
+
MarkupSafe        2.0.1
itsdangerous      0.24
 
Jinja2            2.10
 
MarkupSafe        1.0
 
 
nmap              0.0.1
 
nmap              0.0.1
paho-mqtt          1.5.1
+
pip                21.3.1
pip                20.3.4
+
pydantic          1.9.0
pydantic          1.8.2
+
pymodbus          2.5.3
pygobject          3.28.1
 
pymodbus          2.5.3rc1
 
 
pyserial          3.5
 
pyserial          3.5
requests          2.26.0
+
requests          2.27.1
 
scapy              2.4.5
 
scapy              2.4.5
schema            0.7.4
+
schema            0.7.5
setuptools        39.0.0
+
setuptools        60.5.0
simplejson        3.13.2
+
six                1.16.0
six                1.11.0
+
sniffio            1.2.0
 
ssdp              1.1.0
 
ssdp              1.1.0
starlette          0.14.2
+
starlette          0.17.1
typing-extensions 3.10.0.2
+
typing_extensions 4.0.1
ujson              3.2.0
+
ujson              5.1.0
urllib3            1.26.7
+
urllib3            1.26.8
Werkzeug          0.14.1
+
Werkzeug          2.0.2
wheel              0.37.0
+
wheel              0.37.1
root@desk-mx6ul-axelulite:~#
+
(desk-env) root@desk-mx6ul-lynx:~#  
</pre>
 
 
 
=== DNF ===
 
 
 
In case of some troubles (which can happens using <code>easy_install</code> or <code>pip</code>), other packages can be directly installed using <code>dnf</code> 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-build images in Yocto, for example '''[https://flask.palletsprojects.com/en/2.0.x/ flask]'''::
 
 
 
<pre class="board-terminal">
 
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:~#
 
 
</pre>
 
</pre>
  
Line 432: Line 510:
  
 
<pre class="board-terminal">
 
<pre class="board-terminal">
root@desk-mx6ul-axelulite:~# python3
+
(desk-env) root@desk-mx6ul-lynx:~# python3
Python 3.5.5 (default, Jul 16 2020, 16:11:13)
+
Python 3.9.4 (default, Apr  4 2021, 18:23:51)  
[GCC 7.3.0] on linux
+
[GCC 10.2.0] on linux
 
Type "help", "copyright", "credits" or "license" for more information.
 
Type "help", "copyright", "credits" or "license" for more information.
 
>>> import sys
 
>>> import sys
Line 448: Line 526:
 
>>> import requests
 
>>> import requests
 
>>> import flask
 
>>> import flask
 +
>>> import fastapi
 
>>> import bottle
 
>>> import bottle
 
>>> import ujson
 
>>> import ujson
>>> import paho
+
>>>  
>>>
+
(desk-env) root@desk-mx6ul-lynx:~#  
</pre>
 
 
 
== Virtual environments ==
 
As explained on [https://docs.python.org/3/tutorial/venv.html 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 <code>virtual environment</code> named '''desk'''
 
<pre class="board-terminal">
 
root@desk-mx6ul-axelulite:~# python3 -m venv desk-env
 
root@desk-mx6ul-axelulite:~# which pip3
 
/usr/bin/pip3
 
root@desk-mx6ul-axelulite:~#
 
</pre>
 
 
 
* activate the <code>virtual environment</code>
 
<pre class="board-terminal">
 
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:~#
 
</pre>
 
* update ''pip3'' in the the <code>virtual environment</code>
 
<pre class="board-terminal">
 
(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:~#
 
</pre>
 
 
 
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):
 
 
 
<pre class="board-terminal">
 
(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:~#
 
 
</pre>
 
</pre>

Latest revision as of 09:14, 10 January 2023

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

2.0.0 Apr 2022 DESK-MX6UL-L 3.0.0

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]

python3 application is 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-lynx:~# python3 --version
Python 3.9.4
root@desk-mx6ul-lynx:~# 

pip3 is not present - by default - on standard root file system, but can be easily installed using python:

root@desk-mx6ul-lynx:~# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0:00:01 --:--:-- 1846k
root@desk-mx6ul-lynx:~# python3 get-pip.py 
Collecting pip
  Downloading pip-21.3.1-py3-none-any.whl (1.7 MB)
     |################| 1.7 MB 2.1 MB/s            
Collecting setuptools
  Downloading setuptools-60.5.0-py3-none-any.whl (958 kB)
     |###########| 958 kB 2.1 MB/s            
Collecting wheel
  Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel, setuptools, pip
Successfully installed pip-21.3.1 setuptools-60.5.0 wheel-0.37.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
root@desk-mx6ul-lynx:~# 

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

root@desk-mx6ul-lynx:~# pip3 --version
pip 21.3.1 from /usr/lib/python3.9/site-packages/pip (python 3.9)
root@desk-mx6ul-lynx:~# 

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 that sometimes need a specific version of a library. In this way it is possible to install the required packages (with their specific version required) only in this virtual environment (which may differ from the root installation).

  • for example, create the virtual environment named desk
root@desk-mx6ul-lynx:~# python3 -m venv desk-env
root@desk-mx6ul-lynx:~# which pip3
/usr/bin/pip3
root@desk-mx6ul-lynx:~# 
  • activate the virtual environment
root@desk-mx6ul-lynx:~# source desk-env/bin/activate
  • check and update pip3 in the the virtual environment
(desk-env) root@desk-mx6ul-lynx:~# which pip3
/home/root/desk-env/bin/pip3
(desk-env) root@desk-mx6ul-lynx:~# python3 -m pip install --upgrade pip
Collecting pip
  Using cached pip-21.3.1-py3-none-any.whl (1.7 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.2.3
    Uninstalling pip-20.2.3:
      Successfully uninstalled pip-20.2.3
Successfully installed pip-21.3.1
(desk-env) root@desk-mx6ul-lynx:~# pip3 --version
pip 21.3.1 from /home/root/desk-env/lib/python3.9/site-packages/pip (python 3.9)
(desk-env) root@desk-mx6ul-lynx:~# 
  • setuptools can be upgraded too:
(desk-env) root@desk-mx6ul-lynx:~# pip3 install --upgrade setuptools
Requirement already satisfied: setuptools in ./desk-env/lib/python3.9/site-packages (49.2.1)
Collecting setuptools
  Using cached setuptools-60.5.0-py3-none-any.whl (958 kB)
Installing collected packages: setuptools
  Attempting uninstall: setuptools
    Found existing installation: setuptools 49.2.1
    Uninstalling setuptools-49.2.1:
      Successfully uninstalled setuptools-49.2.1
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed setuptools-60.5.0
(desk-env) root@desk-mx6ul-lynx:~# 

Afterword, the wheel package is worth to be installed for further package installation:

(desk-env) root@desk-mx6ul-lynx:~# pip3 install wheel
Collecting wheel
  Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed wheel-0.37.1
(desk-env) root@desk-mx6ul-lynx:~#

pip package installation[edit | edit source]

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

In this example, the following packages are installed pyserial and pymodbus (for bus communications), flask, fastapi (web framework), bottle (lightweight WSGI micro web-framework), requests (HTTP library), schema, ssdp, scapy (network packet manipulation), nmap, ujson (JSON framework):

(desk-env) root@desk-mx6ul-lynx:~# pip3 install pyserial
Collecting pyserial
  Downloading pyserial-3.5-py2.py3-none-any.whl (90 kB)
     Collecting fastapi
  Downloading fastapi-0.72.0-py3-none-any.whl (52 kB)
     |████████████████████████████████| 52 kB 77 kB/s
Collecting pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2
  Downloading pydantic-1.9.0-py3-none-any.whl (140 kB)
     |████████████████████████████████| 140 kB 2.1 MB/s
Collecting starlette==0.17.1
  Downloading starlette-0.17.1-py3-none-any.whl (58 kB)
     |████████████████████████████████| 58 kB 619 kB/s
Collecting anyio<4,>=3.0.0
  Downloading anyio-3.5.0-py3-none-any.whl (79 kB)
     |████████████████████████████████| 79 kB 797 kB/s
Collecting typing-extensions>=3.7.4.3
  Downloading typing_extensions-4.0.1-py3-none-any.whl (22 kB)
Collecting sniffio>=1.1
  Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)
Collecting idna>=2.8
  Downloading idna-3.3-py3-none-any.whl (61 kB)
     |████████████████████████████████| 90 kB 780 kB/s            
Installing collected packages: pyserial
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed pyserial-3.5
(desk-env) root@desk-mx6ul-lynx:~# pip3 install pymodbus
Collecting pymodbus
  Downloading pymodbus-2.5.3-py2.py3-none-any.whl (154 kB)
     |████████████████████████████████| 154 kB 1.5 MB/s            
Collecting six>=1.15.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Requirement already satisfied: pyserial>=3.4 in ./desk-env/lib/python3.9/site-packages (from pymodbus) (3.5)
Installing collected packages: six, pymodbus
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed pymodbus-2.5.3 six-1.16.0
(desk-env) root@desk-mx6ul-lynx:~# pip3 install flask
Collecting flask
  Downloading Flask-2.0.2-py3-none-any.whl (95 kB)
     |████████████████████████████████| 95 kB 422 kB/s
Collecting Werkzeug>=2.0
  Downloading Werkzeug-2.0.2-py3-none-any.whl (288 kB)
     |████████████████████████████████| 288 kB 2.1 MB/s
Collecting itsdangerous>=2.0
  Downloading itsdangerous-2.0.1-py3-none-any.whl (18 kB)
Collecting click>=7.1.2
  Downloading click-8.0.3-py3-none-any.whl (97 kB)
     |████████████████████████████████| 97 kB 226 kB/s
Collecting Jinja2>=3.0
  Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB)
     |████████████████████████████████| 133 kB 2.1 MB/s
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.0.1.tar.gz (18 kB)
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: MarkupSafe
  Building wheel for MarkupSafe (setup.py) ... done
  Created wheel for MarkupSafe: filename=MarkupSafe-2.0.1-cp39-cp39-linux_armv7l.whl size=25720 sha256=4fa273af41ed51d0614beb76603162148fd15472aa0eb8c1c28a9c18ed137031
  Stored in directory: /home/root/.cache/pip/wheels/9f/6d/c8/1f59b07cf85ae842908006ec28f4477f7e4578df72c3eb0e46
Successfully built MarkupSafe
Installing collected packages: MarkupSafe, Werkzeug, Jinja2, itsdangerous, click, flask
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed Jinja2-3.0.3 MarkupSafe-2.0.1 Werkzeug-2.0.2 click-8.0.3 flask-2.0.2 itsdangerous-2.0.1
(desk-env) root@desk-mx6ul-lynx:~# pip3 install fastapi
Collecting fastapi
  Downloading fastapi-0.72.0-py3-none-any.whl (52 kB)
     |████████████████████████████████| 52 kB 77 kB/s
Collecting pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2
  Downloading pydantic-1.9.0-py3-none-any.whl (140 kB)
     |████████████████████████████████| 140 kB 2.1 MB/s
Collecting starlette==0.17.1
  Downloading starlette-0.17.1-py3-none-any.whl (58 kB)
     |████████████████████████████████| 58 kB 619 kB/s
Collecting anyio<4,>=3.0.0
  Downloading anyio-3.5.0-py3-none-any.whl (79 kB)
     |████████████████████████████████| 79 kB 797 kB/s
Collecting typing-extensions>=3.7.4.3
  Downloading typing_extensions-4.0.1-py3-none-any.whl (22 kB)
Collecting sniffio>=1.1
  Downloading sniffio-1.2.0-py3-none-any.whl (10 kB)
Collecting idna>=2.8
  Downloading idna-3.3-py3-none-any.whl (61 kB)
     |████████████████████████████████| 61 kB 770 kB/s
Installing collected packages: sniffio, idna, typing-extensions, anyio, starlette, pydantic, fastapi
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed anyio-3.5.0 fastapi-0.72.0 idna-3.3 pydantic-1.9.0 sniffio-1.2.0 starlette-0.17.1 typing-extensions-4.0.1
(desk-env) root@desk-mx6ul-lynx:~# pip3 install bottle
Collecting bottle
  Downloading bottle-0.12.19-py3-none-any.whl (89 kB)
     |████████████████████████████████| 89 kB 724 kB/s
Installing collected packages: bottle
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed bottle-0.12.19
(desk-env) root@desk-mx6ul-lynx:~# pip3 install requests
Collecting requests
  Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)
     |████████████████████████████████| 63 kB 141 kB/s
Requirement already satisfied: idna<4,>=2.5 in ./desk-env/lib/python3.9/site-packages (from requests) (3.3)
Collecting charset-normalizer~=2.0.0
  Downloading charset_normalizer-2.0.10-py3-none-any.whl (39 kB)
Collecting certifi>=2017.4.17
  Downloading certifi-2021.10.8-py2.py3-none-any.whl (149 kB)
     |████████████████████████████████| 149 kB 2.2 MB/s
Collecting urllib3<1.27,>=1.21.1
  Downloading urllib3-1.26.8-py2.py3-none-any.whl (138 kB)
     |████████████████████████████████| 138 kB 2.2 MB/s
Installing collected packages: urllib3, charset-normalizer, certifi, requests
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed certifi-2021.10.8 charset-normalizer-2.0.10 requests-2.27.1 urllib3-1.26.8
(desk-env) root@desk-mx6ul-lynx:~# pip3 install schema
Collecting schema
  Downloading schema-0.7.5-py2.py3-none-any.whl (17 kB)
Collecting contextlib2>=0.5.5
  Downloading contextlib2-21.6.0-py2.py3-none-any.whl (13 kB)
Installing collected packages: contextlib2, schema
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed contextlib2-21.6.0 schema-0.7.5
(desk-env) root@desk-mx6ul-lynx:~# pip3 install ssdp
Collecting ssdp
  Downloading ssdp-1.1.0-py2.py3-none-any.whl (4.3 kB)
Installing collected packages: ssdp
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed ssdp-1.1.0
(desk-env) root@desk-mx6ul-lynx:~# pip3 install scapy
Collecting scapy
  Downloading scapy-2.4.5.tar.gz (1.1 MB)
     |████████████████████████████████| 1.1 MB 1.4 MB/s
  Preparing metadata (setup.py) ... done
Building wheels for collected packages: scapy
  Building wheel for scapy (setup.py) ... done
  Created wheel for scapy: filename=scapy-2.4.5-py2.py3-none-any.whl size=1261555 sha256=df65309a4f5e0ee8e9f5da16f5b22b41c5a3d0ab03d671f788451874deeca183
  Stored in directory: /home/root/.cache/pip/wheels/c8/9b/2f/012f0dbaf869afac8be52d4423f34eaa0b6c5c2d1292e40ebd
Successfully built scapy
Installing collected packages: scapy
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed scapy-2.4.5
(desk-env) root@desk-mx6ul-lynx:~# pip3 install nmap
Collecting nmap
  Downloading nmap-0.0.1-py3-none-any.whl (2.7 kB)
Installing collected packages: nmap
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed nmap-0.0.1
(desk-env) root@desk-mx6ul-lynx:~# pip3 install ujson
Collecting ujson
  Downloading ujson-5.1.0.tar.gz (7.1 MB)
     |████████████████████████████████| 7.1 MB 10 kB/s
  WARNING: Value for prefixed-purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /tmp/pip-build-env-y3_ib386/normal/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for prefixed-platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /tmp/pip-build-env-y3_ib386/normal/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = '/tmp/pip-build-env-y3_ib386/normal'
  WARNING: Value for prefixed-purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /tmp/pip-build-env-y3_ib386/overlay/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for prefixed-platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /tmp/pip-build-env-y3_ib386/overlay/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = '/tmp/pip-build-env-y3_ib386/overlay'
  WARNING: Value for purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
  WARNING: Value for platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: ujson
  Building wheel for ujson (pyproject.toml) ... done
  Created wheel for ujson: filename=ujson-5.1.0-cp39-cp39-linux_armv7l.whl size=37764 sha256=adb6cfae7a4edcd38706c5b910adeee4549af56433bbe17eed89b08f77dd25aa
  Stored in directory: /home/root/.cache/pip/wheels/5b/11/cb/2e1acde83fd78adc6581984c55442e63d7595711b0b62d8110
Successfully built ujson
Installing collected packages: ujson
  WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/10151>
  distutils: /home/root/desk-env/lib/python3.9/site-packages
  sysconfig: /usr/lib/python3.9/site-packages
  WARNING: Additional context:
  user = False
  home = None
  root = None
  prefix = None
Successfully installed ujson-5.1.0
(desk-env) root@desk-mx6ul-lynx:~#

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

(desk-env) root@desk-mx6ul-lynx:~# pip3 list
Package            Version
------------------ ---------
anyio              3.5.0
bottle             0.12.19
certifi            2021.10.8
charset-normalizer 2.0.10
click              8.0.3
contextlib2        21.6.0
fastapi            0.72.0
Flask              2.0.2
idna               3.3
itsdangerous       2.0.1
Jinja2             3.0.3
MarkupSafe         2.0.1
nmap               0.0.1
pip                21.3.1
pydantic           1.9.0
pymodbus           2.5.3
pyserial           3.5
requests           2.27.1
scapy              2.4.5
schema             0.7.5
setuptools         60.5.0
six                1.16.0
sniffio            1.2.0
ssdp               1.1.0
starlette          0.17.1
typing_extensions  4.0.1
ujson              5.1.0
urllib3            1.26.8
Werkzeug           2.0.2
wheel              0.37.1
(desk-env) root@desk-mx6ul-lynx:~# 

import packages[edit | edit source]

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

(desk-env) root@desk-mx6ul-lynx:~# python3
Python 3.9.4 (default, Apr  4 2021, 18:23:51) 
[GCC 10.2.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 fastapi
>>> import bottle
>>> import ujson
>>> 
(desk-env) root@desk-mx6ul-lynx:~#