Open main menu

DAVE Developer's Wiki β

Changes

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

1,721 bytes added, 09:14, 10 January 2023
no edit summary
{{InfoBoxTop}}
{{AppliesToAXEL ULite AN}}
{{AppliesTo_SBC_Lynx_AN}}
{{AppliesTo_RIALTO_SBC_AN}}
{{InfoBoxBottom}}
{{ImportantMessage|text=This application note has been validated using the '''kit version''' in the History table.}}
!Development Kit version
|-
| {{oldid|14782| 1.0.0}}
| Oct 2021
|{{oldid|14780|DESK-MX6UL-L 1.0.1}}|-| 2.0.0| Apr 2022|[[DESK-MX6UL-L/General/Release_Notes#DESK-MX6UL-L_1L_3.0.10|DESK-MX6UL-L 13.0.10]]
|-
|}
As reported in [https://opensource.com/life/16/8/python-vs-cc-embedded-systems 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 <code>python3</code> libraries to the [[SBC_Lynx_SBC | SBC Lynx]] platform.
== Python on DESK ==
<code>python</code> and <code>python3</code> applications are 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 ==
<pre class="board-terminal">
root@desk-mx6ul-axelulitelynx:~# python3 --versionPython 3.5.5root@desk-mx6ul-axelulite:~# pip --versionpip 9.0.3 from /usr/lib/python2.7/site-packages (python 2.7)4root@desk-mx6ul-axelulitelynx:~#
</pre>
This shows that <code>pip3</code> is not present in the - ''by default'' - on standard root file system and should , but can be easily 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:
<pre class="board-terminal">
root@desk-mx6ul-axelulitelynx:~# python3 curl https://bootstrap.pypa.io/get-pip.pyDEPRECATION: 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. -o get-pip 21.py % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 will drop support for Python 3.5 in January 2021. :00:01 --:--:-- 1846kroot@desk-mx6ul-lynx:~# python3 get-pip 21.0 will remove support for this functionality.py Collecting pip<21.0 Downloading pip-2021.3.41-py2.py3-none-any.whl (1.5 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.5 MB 176 kB/s
Collecting wheel
Downloading wheel-0.37.01-py2.py3-none-any.whl (35 kB)Installing collected packages: wheel, setuptools, pipSuccessfully installed pip-2021.3.4 1 setuptools-60.5.0 wheel-0.37.01WARNING: Running pip as the 'root@desk-mx6ul-axelulite' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https:~# //pippip pip2 pip2.7 pip3 pip3pypa.5io/warnings/venvroot@desk-mx6ul-axelulitelynx:~#
</pre>
After the installation, <code>pip3</code> is the latest version available for '''Python3 3.59.54''':
<pre class="board-terminal">
root@desk-mx6ul-axelulitelynx:~# pip3 --versionpip 2021.3.4 1 from /usr/lib/python3.59/site-packages/pip (python 3.59)root@desk-mx6ul-axelulite:~# easy3_install --versionsetuptools 39.0.0 from /usr/lib/python3.5/site-packages (Python 3.5)root@desk-mx6ul-axelulitelynx:~#
</pre>
=== easy install=Virtual environments ==Even if <code>easy_install</code> tool As explained on [https://setuptoolsdocs.pypapython.io/enorg/latest3/deprecatedtutorial/easy_installvenv.html has been deprecatedpython3 12. Virtual Environments and Packages], tutorial it is better to ''"create a useful tool still present in the typical python distributions.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 This avoids the purposes problem related to Applications that sometimes need a specific version of a library. In this Application Note, the tool has been used way it is possible to install some python packages typically used in an Industrial Gateway equipment In this example, the following required packages are installed using <code>easy3_install</code> (''easy_install'' with their specific version for python3required): only in this ''virtual environment'pyserial'(which may differ from the '' and root'''pymodbus''' (for bus communicationsinstallation), '''[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">
root@desk-mx6ul-axelulitelynx:~# easy3_install pyserialSearching for pyserialReading https://pypi.python.org/simple/pyserial/Downloading https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl#sha256=c4451db6ba391ca6ca299fb3ec7bae67a5c55dde170964c7a14ceefec02f2cf0Best match: pyserial 3.5Processing pyserial-3.5-py2.py3-none-any.whlInstalling pyserial-3.5-py2.py3-none-any.whl to /usr/lib/python3.5/site-packageswriting requirements to /usr/lib/python3.5/site-packages/pyserial-3.5-py3.5.egg/EGG-INFO/requires.txtAdding pyserial 3.5 to easy-install.pth fileInstalling pyserial-miniterm script to /usr/binInstalling pyserial-ports script to /usr/bin Installed /usr/lib/python3.5/site-packages/pyserial-3.5-py3.5.eggProcessing dependencies for pyserialFinished processing dependencies for pyserialroot@source desk-mx6ul-axelulite:~# easy3_install pymodbusSearching for pymodbusReading 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=e8cbf3594a8dd0f71c287e24d8365e69836c8d22cac5ab288110638fd2b9fda6Best match: pymodbus 2.5.3rc1Processing pymodbus-2.5.3rc1-py2.py3-none-any.whlInstalling pymodbus-2.5.3rc1-py2.py3-none-any.whl to /usr/lib/python3.5/site-packageswriting requirements to /usr/lib/python3.5/site-packages/pymodbus-2.5.3rc1-py3.5.egg/EGG-INFO/requires.txtAdding pymodbus 2.5.3rc1 to easy-install.pth fileInstalling pymodbus.console script to /usrenv/binInstalling pymodbus.server script to /usr/bin Installed /usr/lib/python3.5/site-packages/pymodbus-2.5.3rc1-py3.5.eggProcessing dependencies for pymodbusSearching for six>=1.15.0Reading 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=8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254Best match: six 1.16.0Processing six-1.16.0-py2.py3-none-any.whlInstalling six-1.16.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packagesAdding six 1.16.0 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/six-1.16.0-py3.5.eggFinished processing dependencies for pymodbusroot@desk-mx6ul-axelulite:~# easy3_install requestsSearching for requestsReading 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=6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24Best match: requests 2.26.0Processing requests-2.26.0-py2.py3-none-any.whlInstalling requests-2.26.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packageswriting requirements to /usr/lib/python3.5/site-packages/requests-2.26.0-py3.5.egg/EGG-INFO/requires.txtAdding requests 2.26.0 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/requests-2.26.0-py3.5.eggProcessing dependencies for requestsSearching for urllib3<1.27,>=1.21.1Reading 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=c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844Best match: urllib3 1.26.7Processing urllib3-1.26.7-py2.py3-none-any.whlInstalling urllib3-1.26.7-py2.py3-none-any.whl to /usr/lib/python3.5/site-packageswriting requirements to /usr/lib/python3.5/site-packages/urllib3-1.26.7-py3.5.egg/EGG-INFO/requires.txtAdding urllib3 1.26.7 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/urllib3-1.26.7-py3.5.eggSearching for idna<4,>=2.5Reading https://pypi.python.org/simple/idna/Downloading https://files.pythonhosted.org/packages/d7/77/ff688d1504cdc4db2a938e2b7b9adee5dd52e34efbd2431051efc9984de9/idna-3.2-py3-none-any.whl#sha256=14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7aBest match: idna 3.2Processing idna-3.2-py3-none-any.whlInstalling idna-3.2-py3-none-any.whl to /usr/lib/python3.5/site-packagesAdding idna 3.2 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/idna-3.2-py3.5.eggSearching for charset-normalizer~=2.0.0Reading 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=5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6Best match: charset-normalizer 2.0.6Processing charset_normalizer-2.0.6-py3-none-any.whlInstalling charset_normalizer-2.0.6-py3-none-any.whl to /usr/lib/python3.5/site-packageswriting requirements to /usr/lib/python3.5/site-packages/charset_normalizer-2.0.6-py3.5.egg/EGG-INFO/requires.txtAdding charset-normalizer 2.0.6 to easy-install.pth fileInstalling normalizer script to /usr/bin Installed /usr/lib/python3.5/site-packages/charset_normalizer-2.0.6-py3.5.eggSearching for certifi>=2017.4.17Reading 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=50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8Best match: certifi 2021.5.30Processing certifi-2021.5.30-py2.py3-none-any.whlInstalling certifi-2021.5.30-py2.py3-none-any.whl to /usr/lib/python3.5/site-packagesAdding certifi 2021.5.30 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/certifi-2021.5.30-py3.5.eggFinished processing dependencies for requestsroot@desk-mx6ul-axelulite:~# easy3_install schemaSearching for schemaReading 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=cf97e4cd27e203ab6bb35968532de1ed8991bce542a646f0ff1d643629a4945dBest match: schema 0.7.4Processing schema-0.7.4-py2.py3-none-any.whlInstalling schema-0.7.4-py2.py3-none-any.whl to /usr/lib/python3.5/site-packageswriting requirements to /usr/lib/python3.5/site-packages/schema-0.7.4-py3.5.egg/EGG-INFO/requires.txtAdding schema 0.7.4 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/schema-0.7.4-py3.5.eggProcessing dependencies for schemaSearching for contextlib2>=0.5.5Reading 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=3fbdb64466afd23abaf6c977627b75b6139a5a3e8ce38405c5b413aed7a0471fBest match: contextlib2 21.6.0Processing contextlib2-21.6.0-py2.py3-none-any.whlInstalling contextlib2-21.6.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packagesAdding contextlib2 21.6.0 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/contextlib2-21.6.0-py3.5.eggFinished processing dependencies for schemaroot@desk-mx6ul-axelulite:~# easy3_install ssdpSearching for ssdpReading 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=dc91a844e54ba6b1a2f3be4d9a52302027f71719c5eb2c0e6fbd77e67e7343adBest match: ssdp 1.1.0Processing ssdp-1.1.0-py2.py3-none-any.whlInstalling ssdp-1.1.0-py2.py3-none-any.whl to /usr/lib/python3.5/site-packagesAdding ssdp 1.1.0 to easy-install.pth file Installed /usr/lib/python3.5/site-packages/ssdp-1.1.0-py3.5.eggProcessing dependencies for ssdpFinished processing dependencies for ssdproot@desk-mx6ul-axelulite:~#activate
</pre>
 Then, add some useful IP packages like * check and update ''pip3'nmap''' or '''[https://scapy.readthedocs.io/en/latestin the the <code>virtual environment</ scapy]''' (network packet manipulation):code>
<pre class="board-terminal">
(desk-env) root@desk-mx6ul-axelulitelynx:~# easy3_install nmapwhich pip3Searching for nmapReading https:/home/pypi.python.orgroot/simpledesk-env/nmapbin/pip3Downloading https://files.pythonhosted.org/packages/f8/6f/6813025bd575ebc771189afaab7c405fdf3f1febaa197525d5aa6fd88ac5/nmap(desk-0.0.1env) root@desk-py3mx6ul-none-any.whllynx:~#sha256=158de16af02043e1a2015662ad1710dfb46dadd2bea8e9d90ba16b78b6650098Best match: nmap 0.0.1Processing nmappython3 -0.0.1-py3m pip install -none-any.whlupgrade pipCollecting pipInstalling nmap Using cached pip-021.03.1-py3-none-any.whl to /usr/lib/python3.5/site-packagesAdding nmap 0.0.(1 to easy-install.pth file7 MB) Installed /usr/lib/python3.5/site-Installing collected packages/nmap-0.0.1-py3.5.eggProcessing dependencies for nmapFinished processing dependencies for nmaproot@desk-mx6ul-axelulite:~# easy3_install scapypipSearching for scapyReading https Attempting uninstall://pypi.python.org/simple/scapy/pipDownloading https Found existing installation://files.pythonhosted.org/packages/85/47/c919432ca258f354bb2c1e645623f891603f185bfc7563d4a21f6432e7ed/scapy-2.4pip 20.5.tar.gz#sha256=bc707e3604784496b6665a9e5b2a69c36cc9fb032af4864b29051531b24c8593Best match: scapy 2.4.53Processing scapy Uninstalling pip-220.4.5.tar.gzWriting /tmp/easy_install-vsqq0ans/scapy-2.4.5/setup.cfg3:Running scapy Successfully uninstalled pip-2.4.5/setup20.py -q bdist_egg --dist-dir /tmp/easy_install-vsqq0ans/scapy-2.4.5/egg3Successfully installed pip-dist-tmp-nauxdhas/usr/lib/python321.5/distutils/dist3.py:261: UserWarning: Unknown distribution option: 'long_description_content_type'1 warnings.warn(msgdesk-env)creating /usr/lib/python3.5/siteroot@desk-mx6ul-packages/scapylynx:~# pip3 -2.4.5-py3.5.eggversionExtracting scapy-2pip 21.43.5-py3.5.egg to 1 from /usrhome/libroot/python3.5/site-packagesAdding scapy 2.4.5 to easydesk-install.pth fileInstalling scapy script to /usr/binInstalling UTscapy script to /usr/bin Installed /usrenv/lib/python3.59/site-packages/scapy-2pip (python 3.4.59)(desk-py3.5.eggProcessing dependencies for scapyFinished processing dependencies for scapyenv) root@desk-mx6ul-axelulitelynx:~#
</pre>
On top of that, some web packages are very useful for creating web applications and remotely control* <code>setuptools</get information from the gateway as '''[https://pypi.org/project/fastapi/ fastapi]''' (high-performance web framework)code> can be upgraded too:
<pre class="board-terminal">
(desk-env) root@desk-mx6ul-axelulitelynx:~# easy3_install fastapipip3 install --upgrade setuptoolsSearching for fastapiReading httpsRequirement already satisfied://pypisetuptools in .python.org/simpledesk-env/fastapilib/Downloading https://filespython3.pythonhosted.org9/site-packages/92/a8/10d8a171afa66e6e8a5cfe82771d11c4c84a2a874c19c0b55c7099001fac/fastapi-0.68(49.2-py3-none-any.whl#sha256=36bcdd3dbea87c586061005e4a40b9bd0145afd766655b4e0ec1d8870b32555c1)Best match: fastapi 0.68.2Collecting setuptoolsProcessing fastapi Using cached setuptools-060.685.20-py3-none-any.whl(958 kB)Installing fastapi-0.68.2-py3-none-any.whl to /usr/lib/python3.5/site-collected packages: setuptools Attempting uninstall: setuptoolswriting requirements to /usr/lib/python3.5/site-packages/fastapi-0.68 Found existing installation: setuptools 49.2-py3.5.egg/EGG1 Uninstalling setuptools-INFO/requires.txtAdding fastapi 0.6849.2 to easy-install.pth file1: Installed /usr/lib/python3.5/site Successfully uninstalled setuptools-packages/fastapi-0.6849.2-py3.5.egg1Processing dependencies for fastapiSearching WARNING: Value for starlette==0scheme.14platlib does not match.2Reading Please report this to <https://pypi.pythongithub.org/simplecom/starlettepypa/Downloading https:pip/issues/files.pythonhosted.org/packages/15/34/db1890f442a1cd3a2c761f4109a0eb4e63503218d70a8c8e97faa09a5500/starlette-0.14.2-py3-none-any.whl#sha256=3c8e48e52736b3161e34c9f0e8153b4f32ec5d8995a3ee1d59410d92f75162ed10151>Best match distutils: starlette 0.14.2Processing starlette-0.14.2-py3-none-any.whlInstalling starlette-0.14.2-py3-none-any.whl to /usrhome/libroot/python3.5/sitedesk-packageswriting requirements to /usrenv/lib/python3.59/site-packages/starlette-0.14.2-py3.5.egg/EGG-INFO/requires.txtAdding starlette 0.14.2 to easy-install.pth file Installed sysconfig: /usr/lib/python3.59/site-packages/starlette-0.14.2-py3.5.eggSearching WARNING: Value for pydantic!=1scheme.7,!=1purelib does not match.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1,Please report this to <2.0.0,>=1.6.2Reading https://pypigithub.python.orgcom/pypa/simplepip/pydanticissues/10151>Downloading https distutils:/home/files.pythonhosted.orgroot/packages/ff/74/54e030641601112309f6d2af620774e9080f99c7a15742fc6a0b170c4076/pydantic-1.8.2-py3-nonedesk-any.whl#sha256=fec866a0b59f372b7e776f2d7308511784dace622e0992a0b59ea3ccee0ae833Best match: pydantic 1.8.2Processing pydantic-1.8.2-py3-none-any.whlInstalling pydantic-1.8.2-py3-none-any.whl to /usrenv/lib/python3.59/site-packageswriting requirements to sysconfig: /usr/lib/python3.59/site-packages/pydantic-1.8.2-py3.5.egg/EGG-INFO/requires.txtAdding pydantic 1.8.2 to easy-install.pth file WARNING: Additional context: user = FalseInstalled /usr/lib/python3.5/site-packages/pydantic-1.8.2-py3.5.egg home = NoneSearching for typing-extensions> root =3.7.4.3NoneReading https://pypi.python.org/simple/typing-extensions/Downloading https://files.pythonhosted.org/packages/74/60/18783336cc7fcdd95dae91d73477830aa53f5d3181ae4fe20491d7fc3199/typing_extensions-3.10.0.2-py3-none-any.whl#sha256 prefix =f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34Best match: typing-extensions 3.10.0.2NoneProcessing typing_extensionsSuccessfully installed setuptools-3.10.0.2-py3-none-any.whlInstalling typing_extensions-3.10.0.2-py3-none-any.whl to /usr/lib/python360.5/site-packagesAdding typing-extensions 3.10.0.2 to easy-install.pth file Installed /usr/lib/python3.5/site(desk-packages/typing_extensions-3.10.0.2-py3.5.eggFinished processing dependencies for fastapi env) root@desk-mx6ul-axelulitelynx:~#
</pre>
and finally an MQTT client like Afterword, the [httphttps://www.eclipsepypi.org/pahoproject/wheel/ Eclipse paho MQTTwheel] package is worth to be installed toofor further package installation
<pre class="board-terminal">
(desk-env) root@desk-mx6ul-axelulitelynx:~# easy3_install paho-mqttpip3 install wheelCollecting wheelSearching for paho Using cached wheel-mqttReading https://pypi0.python37.org/simple/paho1-mqtt/Downloading https://filespy2.pythonhosted.org/packages/32/d3/6dcb8fd14746fcde6a556f932b5de8bea8fedcb85b3a092e0e986372c0e7/pahopy3-mqttnone-1any.5.1.tar.gz#sha256=9feb068e822be7b3a116324e01fb6028eb1d66412bf98595ae72698965cb1caewhl (35 kB)Best matchInstalling collected packages: paho-mqtt 1.5.1wheelProcessing paho-mqtt-1 WARNING: Value for scheme.5platlib does not match.1Please report this to <https://github.tar.gzWriting com/tmppypa/easy_install-vkarrpqipip/paho-mqtt-1.5.1issues/setup.cfg10151>Running paho-mqtt-1.5.1 distutils: /setup.py -q bdist_egg --dist-dir home/tmproot/easy_installdesk-vkarrpqienv/lib/paho-mqtt-1python3.5.19/eggsite-dist-tmp-tt8lku70packagescreating sysconfig: /usr/lib/python3.59/site-packages/paho_mqtt-1 WARNING: Value for scheme.5purelib does not match.1-py3Please report this to <https://github.5.eggcom/pypa/pip/issues/10151>Extracting paho_mqtt-1.5.1 distutils: /home/root/desk-py3.5.egg to /usrenv/lib/python3.59/site-packagesAdding paho-mqtt 1.5.1 to easy-install.pth file Installed sysconfig: /usr/lib/python3.59/site-packages/paho_mqtt WARNING: Additional context: user = False home = None root = None prefix = NoneSuccessfully installed wheel-10.537.1-py3.5.eggProcessing dependencies for paho(desk-mqttFinished processing dependencies for paho-mqttenv) root@desk-mx6ul-axelulitelynx:~#
</pre>
=== 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
It is possible to use <code>pip3<In this example, the following packages are installed '''pyserial''' and '''pymodbus''' (for bus communications), '''[https://flask.palletsprojects.com/en/2.0.x/code> for installing other flask]''', '''[https://fastapi.tiangolo.com/ fastapi]''' (web/API framework like ), '''[https://bottlepy.org/docs/dev/ bottle]''' (lightweight WSGI micro web-framework) and , '''[https://flaskdocs.palletsprojectspython-requests.comorg/en/2latest/ requests]''' (HTTP library), '''schema''', '''ssdp''', '''[https://scapy.readthedocs.0io/en/latest/ scapy]''' (network packet manipulation), '''nmap''', '''[https://pypi.xorg/project/ujson/ flaskujson]'''(JSON framework):
<pre class="board-terminal">
(desk-env) root@desk-mx6ul-axelulitelynx:~# pip3 install bottlepyserialDEPRECATION: Python Collecting pyserial Downloading pyserial-3.5 reached the end of its life on September 13th-py2.py3-none-any.whl (90 kB) Collecting fastapi Downloading fastapi-0.72.0-py3-none-any.whl (52 kB) |████████████████████████████████| 52 kB 77 kB/sCollecting pydantic!=1.7, 2020!=1.7.1,!=1.7.2,!=1.7. Please upgrade your Python as Python 3,!=1.8,!=1.8.1,<2.0.0,>=1.6.2 Downloading pydantic-1.5 is no longer maintained9.0-py3-none-any.whl (140 kB) |████████████████████████████████| 140 kB 2.1 MB/sCollecting starlette==0.17.1 Downloading starlette-0.17.1-py3-none-any.whl (58 kB) |████████████████████████████████| 58 kB 619 kB/sCollecting anyio<4,>=3. pip 210.0 will drop support for Python Downloading anyio-3.5 in January 2021. pip 210-py3-none-any.whl (79 kB) |████████████████████████████████| 79 kB 797 kB/sCollecting typing-extensions>=3.7.4.3 Downloading typing_extensions-4.0 will remove support for this functionality.1-py3-none-any.whl (22 kB)Collecting bottlesniffio>=1.1 Downloading bottlesniffio-1.2.0-py3-none-any.12whl (10 kB)Collecting idna>=2.198 Downloading idna-3.3-py3-none-any.whl (89 61 kB) |################################████████████████████████████████| 89 90 kB 486 780 kB/s Installing collected packages: bottlepyserial 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 = NoneSuccessfully installed bottlepyserial-03.12.195(desk-env) root@desk-mx6ul-axelulitelynx:~# pip3 install flaskpymodbusCollecting pymodbusDEPRECATION: Python 3 Downloading pymodbus-2.5 reached the end of its life on September 13th, 2020. Please upgrade your Python as Python 3-py2.py3-none-any.whl (154 kB) |████████████████████████████████| 154 kB 1.5 is no longer maintainedMB/s Collecting six>=1. pip 2115.0 Downloading six-1.16.0 will drop support for Python -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 in January 2021)Installing collected packages: six, pymodbus WARNING: Value for scheme.platlib does not match. Please report this to <https://github. com/pypa/pip 21/issues/10151> distutils: /home/root/desk-env/lib/python3.9/site-packages sysconfig: /usr/lib/python3.0 will remove support 9/site-packages WARNING: Value for scheme.purelib does not match. Please report this functionalityto <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 = NoneSuccessfully installed pymodbus-2.5.3 six-1.16.0(desk-env) root@desk-mx6ul-lynx:~# pip3 install flask
Collecting flask
Downloading Flask-12.10.42-py2.py3-none-any.whl (94 95 kB) |################################████████████████████████████████| 94 95 kB 299 422 kB/sCollecting click<8.0,Werkzeug>=52.10 Downloading clickWerkzeug-72.10.2-py2.py3-none-any.whl (82 288 kB) |################################████████████████████████████████| 82 kB 75 288 kB2.1 MB/sCollecting Jinja2<3.0,itsdangerous>=2.10.10 Downloading Jinja2itsdangerous-2.110.31-py2.py3-none-any.whl (125 18 kB) |################################| 125 kB 228 kB/sCollecting itsdangerous<2.0,click>=07.1.242 Downloading itsdangerousclick-18.10.03-py2.py3-none-any.whl (16 97 kB) |████████████████████████████████| 97 kB 226 kB/sCollecting Werkzeug<2.0,Jinja2>=3.0.15 Downloading WerkzeugJinja2-13.0.13-py2.py3-none-any.whl (298 133 kB) |################################████████████████████████████████| 298 kB 141 133 kB2.1 MB/sCollecting MarkupSafe>=2.0.23 Downloading MarkupSafe-12.10.1.tar.gz (19 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-12.10.1-cp35cp39-cp35mcp39-linux_armv7l.whl size=30216 25720 sha256=8625a9a35d280496da7b267207b70a9484b699e18f17bb869ca8bfa8ea4dfb254fa273af41ed51d0614beb76603162148fd15472aa0eb8c1c28a9c18ed137031 Stored in directory: /home/root/.cache/pip/wheels/189f/c66d/76c8/e7b4c7aeea1fc00134bfddf7ebadb0d91afda4c958b5bd40321f59b07cf85ae842908006ec28f4477f7e4578df72c3eb0e46
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 = NoneSuccessfully installed Jinja2-3.0.3 MarkupSafe-2.110.1 Werkzeug-2.0.2 click-8.0.3 MarkupSafeflask-2.0.2 itsdangerous-2.0.1(desk-env) root@desk-mx6ul-lynx:~# pip3 install fastapiCollecting fastapi Downloading fastapi-0.72.0-py3-none-any.whl (52 kB) |████████████████████████████████| 52 kB 77 kB/sCollecting pydantic!=1.7,!=1.7.1,!=1.7.2,!=1.7.3,!=1.8,!=1.8.1 Werkzeug,<2.0.0,>=1.6.2 Downloading pydantic-1.9.0-py3-none-any.whl (140 kB) |████████████████████████████████| 140 kB 2.1MB/sCollecting starlette==0.17.1 Downloading starlette-0.17.1 click-py3-none-any.whl (58 kB) |████████████████████████████████| 58 kB 619 kB/sCollecting anyio<4,>=3.0.0 Downloading anyio-3.5.0-py3-none-any.whl (79 kB) |████████████████████████████████| 79 kB 797 kB/sCollecting 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 flask.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/sInstalling 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 = NoneSuccessfully installed anyio-3.5.0 fastapi-0.72.0 idna-3.3 pydantic-1.9.0 sniffio-1.4 itsdangerous2.0 starlette-0.17.1typing-extensions-4.0.1(desk-env) root@desk-mx6ul-lynx:~# pip3 install bottleCollecting bottle Downloading bottle-0.12.19-py3-none-any.whl (89 kB) |████████████████████████████████| 89 kB 724 kB/sInstalling 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 = NoneSuccessfully installed bottle-0.12.19(desk-env) root@desk-mx6ul-axelulitelynx:~#pip3 install requestsCollecting requests Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB) |████████████████████████████████| 63 kB 141 kB/sRequirement already satisfied: idna<4,>=2.5 in ./desk-env/lib/prepython3.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/sand JSON framework like '''[Collecting urllib3<1.27,>=1.21.1 Downloading urllib3-1.26.8-py2.py3-none-any.whl (138 kB) |████████████████████████████████| 138 kB 2.2 MB/sInstalling collected packages: urllib3, charset-normalizer, certifi, requests WARNING: Value for scheme.platlib does not match. Please report this to <https://pypigithub.orgcom/pypa/projectpip/ujsonissues/ ujson]'''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 <pre classhttps://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 ="boardFalse home = None root = None prefix = NoneSuccessfully installed certifi-terminal">2021.10.8 charset-normalizer-2.0.10 requests-2.27.1 urllib3-1.26.8(desk-env) root@desk-mx6ul-axelulitelynx:~# pip3 install ujsonschemaCollecting schema Downloading schema-0.7.5-py2.py3-none-any.whl (17 kB)DEPRECATION: Python 3Collecting contextlib2>=0.5.5 reached the end of its life on September 13th Downloading contextlib2-21.6.0-py2.py3-none-any.whl (13 kB)Installing collected packages: contextlib2, 2020schema 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 upgrade your Python as Python 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 = NoneSuccessfully installed contextlib2-21.6.0 schema-0.7.5(desk-env) root@desk-mx6ul-lynx:~# pip3 install ssdpCollecting ssdp Downloading ssdp-1.1.0-py2.py3-none-any.whl (4.3kB)Installing collected packages: ssdp WARNING: Value for scheme.platlib does not match. Please report this to <https://github.5 is no longer maintainedcom/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 21/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 = NoneSuccessfully installed ssdp-1.1.0 will drop support (desk-env) root@desk-mx6ul-lynx:~# pip3 install scapyCollecting scapy Downloading scapy-2.4.5.tar.gz (1.1 MB) |████████████████████████████████| 1.1 MB 1.4 MB/s Preparing metadata (setup.py) ... doneBuilding wheels for Python 3collected 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 January 2021directory: /home/root/.cache/pip/wheels/c8/9b/2f/012f0dbaf869afac8be52d4423f34eaa0b6c5c2d1292e40ebdSuccessfully built scapyInstalling 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 21/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 = NoneSuccessfully installed scapy-2.4.5(desk-env) root@desk-mx6ul-lynx:~# pip3 install nmapCollecting nmap Downloading nmap-0.0 will remove support .1-py3-none-any.whl (2.7 kB)Installing collected packages: nmap WARNING: Value for scheme.platlib does not match. Please report this functionalityto <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 = NoneSuccessfully installed nmap-0.0.1(desk-env) root@desk-mx6ul-lynx:~# pip3 install ujson
Collecting ujson
Downloading ujson-35.21.0.tar.gz (7.1 MB) |################################████████████████████████████████| 7.1 MB 21 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 wheel metadata (pyproject.toml) ... done
Building wheels for collected packages: ujson
Building wheel for ujson (PEP 517pyproject.toml) ... done Created wheel for ujson: filename=ujson-35.21.0-cp35cp39-cp35mcp39-linux_armv7l.whl size=168783 37764 sha256=69ee66de3fdd504505c0b3bd0e6e9b54cc322a93374c50eec92b18077523b3d3adb6cfae7a4edcd38706c5b910adeee4549af56433bbe17eed89b08f77dd25aa Stored in directory: /home/root/.cache/pip/wheels/d75b/f511/aecb/ca9a177378cfd568da6585bf3f10a79d3d577332ef1e3278db2e1acde83fd78adc6581984c55442e63d7595711b0b62d8110
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 = NoneSuccessfully installed ujson-35.21.0(desk-env) root@desk-mx6ul-axelulitelynx:~#
</pre>
 === DNF check for installed packages and version ===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, for installing ''ujson''' it is possible to use <code>dnf install <rpm-package></code>: 
<pre class="board-terminal">
(desk-env) root@desk-mx6ul-axelulitelynx:~# dnf install python3-ujsonLast metadata expiration check: 1:31:56 ago on Wed Oct 6 08:39:56 2021.Dependencies resolved.pip3 list================================================================================ Package Arch Version Repository Size================================================================================Installing: python3-ujson cortexa7hf_neon 1.35-r0 cortexa7hf 24 k Transaction Summary================================================================================Install 1 Package Total download size: 24 kInstalled size: 59 kIs this ok [y/N]: yDownloading Packages:python3-ujson-1.35-r0.cortexa7hf_neon.rpm 22 kB/s | 24 kB 00:01-------------------------------------------------------------------------------anyio 3.5.0bottle 0.12.19certifi 2021.10.8charset-normalizer 2.0.10click 8.0.3Total contextlib2 21 kB/s | 24 kB 00:01.6.0Running transaction checkfastapi 0.72.0Transaction check succeededFlask 2.0.2Running transaction testidna 3.3Transaction test succeededitsdangerous 2.0.1Running transactionJinja2 3.0.3 Preparing : MarkupSafe 2.0.1/nmap 0.0.1 Installing : python3-ujson-pip 21.3.1pydantic 1.35-r09.0pymodbus 2.5.3pyserial 3.5requests 2.27.cortexa7hf_neon 1/scapy 2.4.5schema 0.7.5setuptools 60.5.0six 1.16.0 Verifying : python3-ujson-sniffio 1.35-r02.cortexa7hf_neon 0ssdp 1/.1.0starlette 0.17.1Installed:typing_extensions 4.0.1 python3-ujson 5.cortexa7hf_neon 1.35-r00urllib3 1.26.8Complete!Werkzeug 2.0.2wheel 0.37.1(desk-env) root@desk-mx6ul-axelulitelynx:~#
</pre>
=== import packages===
Finally, after the installation steps, it is possible to ''import'' the packages:
<pre class="board-terminal">
(desk-env) root@desk-mx6ul-axelulitelynx:~# python3Python 3.59.5 4 (default, Jul 16 2020Apr 4 2021, 1618:1123:1351)[GCC 710.32.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import os
>>> import time
>>> import supervisor
>>> import ssl
>>> import nmap
>>> import requests
>>> import flask
>>> import fastapi
>>> import bottle
>>> import ujson
>>> import paho>>>(desk-env) root@desk-mx6ul-lynx:~#
</pre>
8,212
edits