pip auf der CCU3

By André Lison 6 comments

In dieser kleinen Ergänzung zum vorangegangenen Post „Python für die CCU3“ möchte ich noch die Installation von pip zeigen. Vorsicht, hierbei wird das root-Filesystem der CCU3 verändert, alles auf eigene Gefahr!

Leider kann pip nicht einfach über die buildroot-Umgebung konfiguriert werden. Statt dessen ist sind kleine Code-Änderungen notwendig. In der Datei package/python3/python3.mk im buildroot-Verzeichnis müssen beide --without-ensurepip durch --with-ensurepip=install ersetzt werden. Es ist wichtig, dass der Backslash (\) am Ende der Zeile erhalten bleibt.

Danach sollte man den Build-Prozess nochmal starten (siehe vorheriger Post) und das python-Verzeichnis auf die CCU3 transferieren.

Anschliessend wird pip installiert und dazu das root-Filesystem read-write gemounted:

# mount -o remount,rw /
# cd /usr/local/python3-3.6.3/
# ./python -m ensurepip --default-pip
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-9.0.1 setuptools-28.8.0

Die nun installierte Version ist uralt, daher ist ein Update notwendig:

# pip install --upgrade pip

Ein Test mit requests sollte nun problemlos durchlaufen. Die Module werden unter /usr/lib/python3.6/site-packages installiert.

pip install requests

Anschliessend sollte das root-FS mit mount -o remount,ro / wieder read-only gesetzt werden.

Mit dieser Anleitung können nur Pakete installiert werden, welche keinen C-Compiler benötigen (der auf der CCU3 nicht vorhanden ist), numpy funktioniert zum Beispiel nicht. Eventuell werde ich in einem späteren Post die Installation von gcc zeigen.

6 Comments

Michael Otto

Dez 12, 2019, 12:39 pm Antworten

Hallo,

der Versuch pip auf der CCU3 zu installieren bringt die Fehlermeldung

# ./python -m ensurepip –default-pip

ModuleNotFoundError: No module named ‚pyexpat‘

Das Modul fehlt aber in der buildroot-Umgebung.

Gruß,

Michael

admin

Dez 12, 2019, 10:14 am Antworten

Hallo Michael,

kannst Du mal mit „make menuconfig“ nachschauen, ob Du unter „> Target packages > Libraries > JSON/XML“ die Library „expat“ und unter „> Target packages > Interpreter languages and scripting > core python3 modules“ den Punkt „xml“ ausgewählt hast?

Grüsse,
André

Michael Otto

Dez 12, 2019, 11:44 am Antworten

Hallo André,

ja, ist beides ausgewählt gewesen.

Gruß,

Michael

admin

Jan 1, 2020, 7:39 pm Antworten

Hm, gib mal auf der Konsole ‚find / | grep pyexpat‘ ein und poste den Output.
Dann starte bitte python an der Kommandozeile und gib ‚help(„modules“)‘ ein.

Grüsse
André

Michael

Feb 2, 2020, 2:22 pm Antworten

# find / | grep pyexpat
/usr/local/python3-3.6.3/PCbuild/pyexpat.vcxproj.filters
/usr/local/python3-3.6.3/PCbuild/pyexpat.vcxproj
/usr/local/python3-3.6.3/Modules/clinic/pyexpat.c.h
/usr/local/python3-3.6.3/Modules/pyexpat.c
/usr/local/python3-3.6.3/Modules/expat/pyexpatns.h
/usr/local/python3-3.6.3/Include/pyexpat.h
/usr/local/python3-3.6.3/Lib/test/test_pyexpat.py
/usr/local/python3-3.6.3/Doc/library/pyexpat.rst

help(‚modules‘)

Please wait a moment while I gather a list of all available modules…

__future__ ast imaplib shutil
_ast asynchat imghdr signal
_asyncio asyncio imp site
_bisect asyncore importlib smtpd
_blake2 atexit inspect smtplib
_bootlocale audioop io sndhdr
_codecs base64 ipaddress socket
_collections bdb itertools socketserver
_collections_abc binascii json spwd
_compat_pickle binhex keyword sqlite3
_compression bisect lib2to3 sre_compile
_crypt builtins linecache sre_constants
_csv bz2 locale sre_parse
_ctypes cProfile logging ssl
_ctypes_test calendar lzma stat
_curses cgi macpath statistics
_curses_panel cgitb macurl2path string
_datetime chunk mailbox stringprep
_decimal cmath mailcap struct
_dummy_thread cmd marshal subprocess
_elementtree code math sunau
_functools codecs mimetypes symbol
_hashlib codeop mmap symtable
_heapq collections modulefinder sys
_imp colorsys msilib sysconfig
_io compileall multiprocessing syslog
_json concurrent netrc tabnanny
_locale configparser nntplib tarfile
_lsprof contextlib ntpath telnetlib
_markupbase copy nturl2path tempfile
_md5 copyreg numbers termios
_multibytecodec crypt opcode test
_multiprocessing csv operator textwrap
_opcode ctypes optparse this
_operator curses os threading
_osx_support datetime parser time
_pickle dbm pathlib timeit
_posixsubprocess decimal pdb tkinter
_pydecimal difflib pickle token
_pyio dis pickletools tokenize
_random distutils pipes trace
_sha1 doctest pkgutil traceback
_sha256 dummy_threading platform tracemalloc
_sha3 email plistlib tty
_sha512 encodings poplib turtle
_signal ensurepip posix turtledemo
_sitebuiltins enum posixpath types
_socket errno pprint typing
_sre faulthandler profile unicodedata
_ssl fcntl pstats unittest
_stat filecmp pty urllib
_string fileinput pwd uu
_strptime fnmatch py_compile uuid
_struct formatter pyclbr venv
_symtable fractions pydoc warnings
_sysconfigdata_m_linux_arm-linux-gnueabihf ftplib pydoc_data wave
_testbuffer functools queue weakref
_testcapi gc quopri webbrowser
_testimportmultiple genericpath random wsgiref
_testmultiphase getopt re xdrlib
_thread getpass readline xml
_threading_local gettext reprlib xmlrpc
_tracemalloc glob resource xxlimited
_warnings grp rlcompleter xxsubtype
_weakref gzip runpy zipapp
_weakrefset hashlib sched zipfile
abc heapq secrets zipimport
aifc hmac select zlib
antigravity html selectors
argparse http shelve
array idlelib shlex

Enter any module name to get more help. Or, type „modules spam“ to search
for modules whose name or summary contain the string „spam“.

PS: Übrigens funktioniert der Trick mit dem Umhängen des Python-Pfads leider nur bis zum nächsten Upgrade …

admin

Mrz 3, 2020, 9:29 am Antworten

Hallo Michael,

sorry für die späte Antwort.
Bei mir liefert ‚find / | grep pyexpat’ noch zwei Zeilen mehr:
/usr/local/python3-3.6.3/build/lib.linux-arm-3.6/pyexpat.cpython-36m-arm-linux-gnueabihf.so
/usr/local/python3-3.6.3/build/temp.linux-arm-3.6/home/alison/development/buildroot-2018.08.2/output/build/python3-3.6.3/Modules/pyexpat.o
Kann es sein, dass Du nicht alles kompiliert oder übertragen hast? Am besten nochmal ‚make clean all‘ und per scp auf die CCU. Wenn Du ganz sicher gehen möchtest, dann lösche doch dein Build-Root-Umgebung und fange nochmal neu an.
Bezüglich Updates hatte ich bisher keine Probleme. Welchen Weg hast Du gewählt: 1) mit dem Script im Pfad oder 2) mit der Modifikation des Root-Filesystems?

Grüsse,
André

Schreibe einen Kommentar