import pymysql verursacht Fehler

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Hallo Ihr,

ich verwende unter Debian (stretch) pymysql. Der folgende Effekt tritt erst seit kurzem auf. Die Anweisung
import pymysql
liefert in der IDE Thonny folgende Meldungen
>>> %Debug test-pymysql.py
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/thonny/backend.py", line 1128, in _execute_prepared_user_code
exec(statements, global_vars)
File "/home/pi/share/test-pymysql.py", line 3, in <module>
import pymysql
File "/usr/local/lib/python3.5/dist-packages/thonny/backend.py", line 290, in _custom_import
module = self._original_import(*args, **kw)
File "/usr/local/lib/python3.5/dist-packages/pymysql/__init__.py", line 96, in <module>
from . import connections as _orig_conn
File "/usr/local/lib/python3.5/dist-packages/thonny/backend.py", line 290, in _custom_import
module = self._original_import(*args, **kw)
File "/usr/local/lib/python3.5/dist-packages/pymysql/connections.py", line 17, in <module>
from . import _auth
File "/usr/local/lib/python3.5/dist-packages/thonny/backend.py", line 290, in _custom_import
module = self._original_import(*args, **kw)
File "/usr/local/lib/python3.5/dist-packages/pymysql/_auth.py", line 8, in <module>
from cryptography.hazmat.backends import default_backend
File "/usr/local/lib/python3.5/dist-packages/thonny/backend.py", line 290, in _custom_import
module = self._original_import(*args, **kw)
ImportError: No module named 'cryptography'
>>>
Quellcode von test-pymysql.py
#!/usr/bin/env python3

import pymysql

try:
db=pymysql.connect("localhost", "user1", "pass1", "db1")
except IOError:
print( "DB open error")
cur=db.cursor()
sql="select count(*) from tab1"
result=cur.execute(sql)
print(result)
db.close()
Was kann ich tun, damit der import wieder funktioniert ?

maksimilian
Rugbein
User
Beiträge: 8
Registriert: Mittwoch 9. Januar 2019, 16:56

'cryptography' wird nicht gefunden, ist das installiert?

versuche mal eine neue python datei

Code: Alles auswählen

import cryptography
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Merkwürdig ! Ich habe in mein Testskript import cryptography eingefügt und cryptography wurde nicht gefunden. Dann habe ich das Paket installiert (dazu vorher pip3 installiert, da ich nur die Möglichkeit der Installation mit pip gefunden habe). pip3 install cryptography meldet
Requirement already satisfied: cryptography in /usr/lib/python3/dist-packages
Aber jetzt funktioniert import pymysql wieder, ohne dass ich wissen kann, dass da ein Zusammenhang besteht. Selbst wenn, sehr merkwürdig!

maksimilian
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@maksimilian: Du hast vielleicht zwei Versionen von Python parallel installiert und einmal die eine und einmal die andere benutzt.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Die unterschiedlichen Pfade in den Meldungen deuten darauf hin:
Eins liegt in /usr/local/lib/python3.5/ und eins in /usr/lib/python3/
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Ah, danke, war mir nicht gleich aufgefallen. Für mich als Anfänger wäre nun interessant, wodurch mein Problem ausgelöst wurde, nachdem es anfangs ja funktioniert hat. Sind durch update-Aktionen vielleicht Pfade geändert worden ? Auf welchen Pfad greift import denn zu (vielleicht systemabhängig)?

maksimilian
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

@ Sirius3

Ich muss u.a. auch lernen mit der Versionsvielfalt einiger Produkte umzugehen. Hier mache ich sicher noch Fehler. Bei mir sind installiert python3 und python3.5 . Da sollte ich wohl das Paket python3 rausschmeißen.

makimilian
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@maksimilian: Wohl eher nicht, denn python3 dürfte python3.5 sein. Schau Dir auf jeden Fall mal an was da dann alles mit deinstalliert wird, wenn Du das versuchst. :-)
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Ja, _blackjack_, es sind python2.7 und python3.5 (alias python) installiert. Aufruf python > Python 2.7.13, Aufruf python3 > Python 3.5.3
Ich denke, dass mein Problem damit zusammenhängt. Der import Fehler tritt nämlich nur in der von mir zum Testen verwendeten IDE (Thonny) auf, und die verwendet offensichtlich python während ich in der Produktivumgebung python3 verwende. Wieder was gelernt (was zur Zeit fortwährend passiert :) ).

Wie kann python mit Python 3.5... verlinkt werden ?

maksimilian
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@maksimilian: Das willst Du nicht, denn dann geht es ja genau umgekehrt kaputt, und da potentiell viel mehr denn das gesamte System geht davon aus, dass ``python`` ein Python 2 ist. Womit ein Skript ausgeführt wird, bestimmt die erste Zeile. Und wenn es Python 3 sein soll, dann darf dann nicht einfach nur ``python`` stehen sondern ``python3``, weil ``python`` grundsätzlich Python 2 ist. (Ausser bei einer bestimmten Linux-Distribution, wo ich das als Fehler sehen würde.)

Python 3-Programme sollten mit ``#!/usr/bin/env python3`` anfangen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

OK, die Konsequenzen eines Python Versionswechsels waren mir nicht klar. Dann lasse ich es natürlich lieber. Da muss ich noch überprüfen, ob die IDE Thonny die erste Zeile eines Python-Skripts auswertet! Hätte die Entfernung von Python3 Nachteile ? Diese Versionsvielfalt installierter Komponenten finde ich nicht sinnvoll (außer, man möchte bestimmte Dinge testen).

maksimilian
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Python 2.7 ist uralt, wird bald nicht mehr gepflegt, die Chance Pakete zu bekommen dafuer sinkt.... das waeren so die Nachteile.

Und was die sinnhaftigkeit angeht: willkommen in der wunderbaren Welt des Programmierens. Wenn man das betreibt, muss man sich zwangslaeufig (und auch in anderen Sprachen) mit der Tatsache herumschlagen, dass es Bibliotheken etc. in verschiedenen Versionnen gibt.

C++03, C++11, C++14, C++17?

Java 7, 8, 9, 10, 11?

Boost 1.57, 1.62, 1.68?

So ist das halt. Du kannst fuer dich selbst entscheiden, dass du nur mit Python X.X arbeiten willst, aber wenn du irgendwas installierst, dass ein Python X.Y vorraussetzt - dann ist das da. Und sich auf Dauer mit dem Paketmanagement und Dingen wie virtual envs nicht beschaeftigen zu *wollen* wird nicht funktionieren.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@maksimilian: Wenn Du Python 3 deinstallierst hast Du den Nachteil das Du kein Python 3 mehr hast. ;-) Das können und werden, zumindest bei aktuellen Linuxdistributionen, ja auch Programme erwarten bzw. als Abhängigkeit haben die Du über die Paketverwaltung installierst. Also könntest Du die nicht nutzen, was ich als Nachteil ansehen würde.

Python an sich hat ja auch schon vorgesehen, dass man mehrere Python-Versionen installiert hat. Die können wunderbar nebeneinander existieren ohne sich zu stören. Also nicht nur Python 2 und Python 3, sonder auch verschiedene Minor-Versionen. Bibliotheksentwickler haben nicht selten Python 2.7, 3.5, 3.6, und 3.7 gleichzeitig auf einem Rechner um die Unittests gegen allen Versionen laufen lassen zu können, die sie offiziell unterstützen. Und eventuell auch noch eine 3.8 um schon vor der Veröffentlichung Probleme damit finden und beheben zu können.

Bei IDEs kann man normalerweise pro Projekt einstellen mit welchem Python sie Programme in dem Projekt ausführen. Oder die IDE sollte zumindest die erste Zeile auswerten. Wobei das unter Linux nicht nötig sein sollte, denn das macht das Betriebssystem ja schon. Und auch unter Windows sollte das funktionieren wenn man ``py.exe`` verwendet und ggf. richtig konfiguriert damit das alle Python-Installationen auf dem System kennt und richtig zuordnen kann.

Und dann gibt es IDEs bei denen die Ausführung aus der IDE heraus sehr stark mit der IDE selbst verbandelt ist. Da kann man dann nur Programme mit schreiben die in der gleichen Umgebung wie IDE selbst laufen. Und wenn die IDE nur mit Python 3 läuft, kann man damit nicht wirklich gut Python 2-Programme entwickeln. Oder die zumindest nicht aus der IDE heraus laufen lassen oder testen. Denn selbst wenn man Code schreibt der unter Python 2 *und* 3 lauffähig ist, muss man den unter Python 2 und 3 testen ob das auch *wirklich* der Fall ist. Thonny ist als „Python :: 3 :: Only” klassifiziert. Dann weisst Du auf was Du auf jeden Fall verzichten musst, wenn Du Python 3 deinstallierst.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

@ _deets_, _blackjack_

Danke für Eure Antworten und Ratschläge. Ich werde erst einmal die Finger von Eingriffen in die vorgegebenen Konfigurationen lassen. Damit erspare ich mir wenigstens von dieser Seite Ärger. Solange der Platz auf der SD-Karte ausreicht und die Performance des Systems nicht leidet, soll es mir eigentlich egal sein. Nur, die Zusammenhänge möchte ich schon begreifen.

Mein import Problem ist zumindest mal geklärt.

maksimilian
Antworten