Page 1 of 1

Python Upgrade von 3.5.2 auf 3.9.0

Posted: 03 Dec 2020, 13:18
by Jan_k
Moin Sven,
Hallo restliche Mitleser,

auf dem RevPi läuft standartmäßig Python 3.5.#. Ich habe vor auf 3.9.0 upzugraden.

Warum updaten?
Mit PEP 0564 wurden die time.#_ns()-Funktionen, wie z.B. time.time_ns() eingeführt. Diese geben die Systemzeit in Nanosekunden aus und bieten eine deutlich höhere genauigkeit. time_ns() bietet z.B. eine 2,8-Fach höhere Genauigkeit ( https://www.python.org/dev/peps/pep-0564/#analysis). Ich habe vor, vier Analogwerte per Numerisch per Trapezformel aufzuintegrieren und da wäre das vermutlich schon ein ganz netter Vorteil. Die Aufnahme ist in Python 3.7 erfolgt.

Was habe ich gemacht?
Python 3.5 scheint die durch APT zur Verfügung gestellte Standard-Version zu sein. Deshalb habe ich dann den Weg genommen und selber einen Build durchgeführt (RevPi auf Arch wäre doch auch mal was, dann kann man sich das sparen...):

Code: Select all

#Abhängigkeiten Installieren (Waren natürlich alle da...)
sudo apt install libffi-dev libbz2-dev liblzma-dev libsqlite3-dev libncurses5-dev libgdbm-dev zlib1g-dev libreadline-dev libssl-dev tk-dev build-essential libncursesw5-dev libc6-dev openssl git

#Python herunterladen und einen Build durchführen (In diesem Fall 3.9.0):
wget https://www.python.org/ftp/python/3.9.0/Python-3.9.0.tar.xz 	#Laden aus dem Internetz
tar xf Python-3.9.0.tar.xz						#Entpacken...
cd Python-3.8.4								#Übernehmen der Weltherrschaft
./configure --enable-optimizations					#Konfigurieren für System
make -j -l 4								#Build von Installationsdatei
sudo make altinstall							#Installieren

#Setzen als Standard-Environment (ByeBye 2.7...)
echo "alias python3=python3.9" >> ~/.bashrc
echo "alias python=python3.9" >> ~/.bashrc
echo "alias pip3=pip3.9" >> ~/.bashrc
source ~/.bashrc
Wie erwartet: Python 3.9.0 wird verwendet und läuft aus dem Terminal heraus...

Das Problem:
RevPiPyLoad verwendet noch immer Python 3.5, obwohl "python" und "python3" Ihren Pfad auf 3.9.0 haben :? . So wie es scheint, wird explizit auf 3.5 zugegriffen. Wie bekomme ich RevPiPyLoad (wenn überhaupt) zu der Verwendung einer anderen Python3-Version überredet?

Ich bedanke mich schon einmal im Vorraus für die Anwort.

Beste Grüße
Jan

Re: Python Upgrade von 3.5.2 auf 3.9.0

Posted: 03 Dec 2020, 14:16
by RevPiModIO
Moin Jan!

Hatte vorhin einen Beitrag hier, der mir aber nicht gefallen hat :P

Könntest du mal folgendes ausprobieren und mir berichtet, ob es läuft:

RevPiPyLoad verwendet für die Ausführung des Steuerungsprogramms: "/usr/bin/env python3 ..."

env bedient sich der PATH Pfade der aktuellen Umgebung und nimmt das erste "python3", welches es in den Pfaden findet...

Die Variable wird eigentlich in /etc/environment definiert, aber in dem init-script (ja, ist noch das alte init-v) überschrieben mit:
PATH=/sbin:/usr/sbin:/bin:/usr/bin

Jetzt das Experiment:
Baue doch bitte in die /etc/default/revpipyload eine Modifikation ein, indem du die alte PATH Variable nimmst und ganz links deinen Pfad hinzufügst, in der die neue python3 liegt!

Code: Select all

# Defaults for revpipyload initscript
# sourced by /etc/init.d/revpipyload
# installed at /etc/default/revpipyload by the maintainer scripts

#
# This is a POSIX shell fragment
#

PATH=/home/pi/python39:/sbin:/usr/sbin:/bin:/usr/bin

# Additional options that are passed to the Daemon.
# For verbose logging add -v or -vv
DAEMON_ARGS=""

Ich habe da einfach mal PATH=/home/pi/python39:/sbin:/usr/sbin:/bin:/usr/bin eingebaut...

Würde mich interessieren, ob er dann die 3.9 verwendet!

PS: und alles irgendwie neu starten, damit die neue PATH übernommen wird ;)

Gruß, Sven

Re: Python Upgrade von 3.5.2 auf 3.9.0

Posted: 03 Dec 2020, 21:44
by Jan_k
Moin Sven,

habe ich versucht, python ist noch immer auf Version 3.5 (Wegen Update anscheinend nun auf 3.5.3...). Daher habe ich einfach mal versucht, ein bisschen weitere informationen zu der Umgebung von revpipyload einzuholen. Von dem Ergebnis bin ich zugegebenermaßen ein wenig verwirrt.

In RevPiPyLoad:
Folgenden Code habe ich ausgeführt. Die Kommentare stellen die Ausgabe dar...

Code: Select all

print("Version lt. Python " + str(sys.version))				# Python 3.5.3
print("Version lt. System: " + str(os.system("python --version")))	# Python 2.7.13
print("Path Python: " + str(os.system("which python")))			# /usr/bin/python
print("Path python3: " + str(os.system("which python3")))		# /usr/bin/python
print("Benutzer: " + str(getpass.getuser()))				# pi
Ok. Der Nutzer ist ebenfalls pi. Unter dem ist ja die Installation erfolgt. Daher könnte man ja einen Installationsfehler annehmen. Daher einmal ein Gegencheck aus dem Terminal als Nutzer pi:

Code: Select all

pi@RevPi40139:~ $ python --version
-->Python 3.9.0

pi@RevPi40139:~ $ which python
-->/usr/bin/python

pi@RevPi40139:~ $ /usr/bin/python --version
-->Python 2.7.13

Nun wird es für mich unlogisch:
[*]Ich bin ebenfalls der Nutzer pi.
[*]Bei nutzen von "python" habe ich die Version 3.9.0 mit dem Pfad /usr/bin/python
[*]Wenn ich direkt über den Pfad /usr/bin/python zugreife habe ich Version 2.7 bzw. 3.5

Anscheinend habe ich nun die Systemvariablen gegrillt :? . Mal schauen, ob ich das jetzt noch gutmütig gelöst bekomme.

Re: Python Upgrade von 3.5.2 auf 3.9.0

Posted: 04 Dec 2020, 14:06
by Jan_k
Hallo Sven,

entgegen der Ausgabe, erfolgt die manuelle Installation von Python3.9 nicht im Ordner /usr/bin/python3.9, sondern /usr/local/bin/python3.9. Da ich mich damit nicht groß aufhalten wollte, habe ich einfach den Link von /usr/bin/python3 auf /usr/local/bin/python3.9 zeigen lassen. Allerdings fehlen nun die Pakete bzw. Bibliotheken. Da der Jitter der Time-Funktion doch nur zu einem relaiv überschaubarem numerischem Fehler führt, ist mir der Punkt nun wiederum doch nicht so wichtig, dass ich noch einmal mehr Zeit da reintecke. Wenn ich das nun zurechtfummel würde es villeicht solide laufen, aber ich kann (in meinem Fall) von anderen Kollegen nicht umbedingt mehr, als ein apt-get erwarten. In Zukunft wird ja irgendwann noch einmal auf 64-bit umgestellt werden müssen...


An @Kunbus hätte ich Zukunft die Bitte, doch mal darüber nachzudenken, ob man das System nicht lieber mit etwas neurem, als einem 5 Jahre altem Versionsstrang, ausliefert. In den letzten fünf Jahren sind doch ein paar nette Features zusammengekommen.

Beste Grüße
Jan