Beim Start über rc.local bekomme ich einen Fehler.

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Jo120
User
Beiträge: 5
Registriert: Sonntag 26. April 2020, 10:06

Hallo,
mein Programm läuft, wenn ich es im SPE Editor starte.
Von der Eingabeebene kann ich es auch starten.
Beim Start über rc.local bekomme ich einen Fehler.

Traceback (most recent call last):
File "/home/pi/Steuerung.py", line 6, in <module>
import mysql
ImportError: No module named mysql

Das Modul ist aber installiert.

MfG
Jo120
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du verwendest ein anderes Python. Am wahrscheinlichsten ist die Nutzung von python2, wenn es python3 sein sollte. Oder umgekehrt. Wobei man nur noch alles mit python3 machen sollte.

Und der Standardfehler, der dir danach auf die Fuesse fallen wird: man benutzt kein rc.local. Man benutzt eine systemd unit, um das Skript zu starten, und vor allem um es nur dann zu starten, wenn die mysql-DB schon gestartet ist. Denn sonst bricht es eh mit einem Verbindungsfehler ab.
Jo120
User
Beiträge: 5
Registriert: Sonntag 26. April 2020, 10:06

Danke für die schnelle Antwort.
wie kann ich feststellen welche Pythonversion verwendet wird?
MfG
Jo120
Jo120
User
Beiträge: 5
Registriert: Sonntag 26. April 2020, 10:06

Bzw. Wie kann ich beeinflussen welche Version gestartet wird?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

python ist ueblicherweise python Version 2. python3 sollte Version 3 sein. Wenn du mehrere Unterversion hast, die du unterscheiden musst, dann gibt es auch pythonX.Y, also zB python3.6 und python3.7

Wenn du in dein Skript folgenden Code ganz oben einfuehrst, wird dir ausgegeben, welchen konkreten Interpreter du nutzt:

Code: Alles auswählen

import sys; print(sys.executable)
nezzcarth
User
Beiträge: 1636
Registriert: Samstag 16. April 2011, 12:47

Jo120 hat geschrieben: Sonntag 26. April 2020, 10:40 Bzw. Wie kann ich beeinflussen welche Version gestartet wird?
Indem du das Skript unter Angabe des absoluten Pfades zum Interpreter startest. Also z.B.: /usr/bin/python3 /home/user/mein_skript.py. Das sollte man bei Sachen, die automatisiert laufen ohnehin tun.
Jo120
User
Beiträge: 5
Registriert: Sonntag 26. April 2020, 10:06

Hallo,

import sys; print(sys.executable)

gibt aus "/usr/bin/python"

wenn ich dann folgende Zeile ausführe: "/usr/bin/python /home/pi/Steuerung.py" bekomme ich die gleiche Fehlermeldung.

MfG
Jo120
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast doch oben behauptet dann geht es. Jetzt plötzlich doch nicht?

Nachtrag: mit "es" meinte ich in der Shell.
Jo120
User
Beiträge: 5
Registriert: Sonntag 26. April 2020, 10:06

Sorry, ist etwas verwirrend.
Ich kann das Programm im Editor ausführen.
Es läuft auch wenn ich es im Terminal mit der oben angegebenen Zeile starte.
Wenn ich die Zeile im Autostart (rc.local) einfüge, dann kommt der Fehler.
Es wird immer mit Python2.7 gestartet, bei allen Startversionen.

Kann das auch ein anderer User sein?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das kann sein, ja. Auch hier hilft die systemd-unit, denn da kannst du angeben als welcher user du das startest.
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Nur damit das nicht untergeht: Das sollte nicht mehr für Python 2 sein. Portiere das möglichst zeitnah nach Python 3.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten