MySQL-Modul in Python 3.6.1 unter OS X wird nicht gefunden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

First of all: Ich bin neu hier und in der Python-Programmierung, arbeite mich gerade durch ein Python-Buch durch und parallel einen Online-Videokurs.
Bislang hat auch alles ganz gut geklappt, aber nun geht es um Python + MySQL und da scheitert das Script, das man im Buch abarbeiten soll, bei mir daran, dass er das benötigte Modul nicht findet. Im Buch reden sie sich damit raus, dass es unter OS X kompliziert sei und deswegen beschreiben sie nur, wie es unter Windows funktioniert.
Ich habe natürlich Google zu Rate gezogen, aber vielleicht habe ich beim Installieren des Moduls auch irgendwas falsch gemacht.

Hier die Fakten:
Habe ein Macbook mit OS X mit Python 3.6.1. (installiert via Homebrew).

Ich habe mich dann an folgende Anleitung gehalten: https://github.com/PyMySQL/mysqlclient-python
Dann das Modul über das Terminal installiert mit:

Code: Alles auswählen

brew install mysql-connector-c
Schien auch funktioniert zu haben.
Aber egal ob ich im Script

Code: Alles auswählen

import MySQLdb
oder

Code: Alles auswählen

import _mysql
versuche, es kommt immer als Fehlermeldung, wenn ich das Script laufen lasse:

Code: Alles auswählen

File "/Users/.../Desktop/Programmieren/DB.py", line 2, in <module>
    import MySQLdb
ModuleNotFoundError: No module named 'MySQLdb'
Habt ihr eine Idee, woran es liegen könnte bzw. was ich falsch gemacht habe und wie sich das Problem lösen lässt?
BlackJack

@Hendy84: Du hast das Modul nicht installiert, Du hast nur den MySQL-Connector/C installiert den das Modul braucht um mit der Datenbank zu kommunizieren. Dir fehlt jetzt noch die Installation des Python-Moduls/Packages mit ``pip install mysqlclient``. Steht fast gleich unter der ``brew …``-Zeile in der README.

Edit: Das `_mysql`-Modul solltest Du nicht verwenden. Ein führender Unterstrich bei Namen bedeutet, dass das nicht zur öffentlichen API gehört.
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

"Pip install mysqlclient" hab ich probiert, da kommt dann eine ewig lange Fehlermeldung, irgendwas mit "Egg". Bin jetzt gerade nicht mehr am Rechner, werde besagte Fehlermeldung morgen Früh hier mal reinkopieren, vielleicht kommt die dir / euch bekannt vor.
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Also, wenn ich "pip install mysqlclient" mache, kommt folgende Fehlermeldung:

Code: Alles auswählen

Collecting mysqlclient
  Using cached mysqlclient-1.3.10.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-rtcCNZ/mysqlclient/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "setup_posix.py", line 54, in get_config
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "setup_posix.py", line 12, in dequote
        if s[0] in "\"'" and s[0] == s[-1]:
    IndexError: string index out of range
    
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-rtcCNZ/mysqlclient/
Weiß jemand, was diese Fehlermeldung bedeutet bzw. wie ich das Modul dennoch installieren kann?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

da du Python 3 benutzt, solltest der Aufruf `pip3 ...` lauten, `pip` ist normalerweise für Python 2.

Gruß, noisefloor
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

PIP3 probiere ich nachher mal aus, hatte ich glaube ich aber auch schon in den letzten Tagen ausprobiert und die Installation scheint trotzdem nicht zu klappen. Werde die Fehlermeldung nach pip3 nachher mal hier posten.
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Anscheinend haben mehrere Leute derzeit (Postings von Anfang Mai) das gleiche Problem wie ich (Ausgangslage OS X, Python 3.6.1 und MySQL via PIP3-Installationsversuche):
https://github.com/PyMySQL/mysqlclient- ... issues/169
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Hab den Befehl jetzt nochmal mit pip3 ausgeführt, Resultat:

Code: Alles auswählen

pip3 install mysqlclient
Collecting mysqlclient
  Using cached mysqlclient-1.3.10.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup_posix.py", line 54, in get_config
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup_posix.py", line 54, in <listcomp>
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/setup_posix.py", line 12, in dequote
        if s[0] in "\"'" and s[0] == s[-1]:
    IndexError: string index out of range
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-6ldjweu1/mysqlclient/
Jemand 'ne Idee?
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

brew doctor gibt mir mehrere Config-Warnings aus, alle in Library/Frameworks/Python, was damit zu tun haben könnte, dass ich Python 2+3 erst herkömmlich installiert hatte und dann später nochmal neu via homebrew.
Könnte das vielleicht den Fehler beim Installieren des MySQL-Moduls für Python3 auslösen bzw. sollte ich diese Config-Files, die mir brew doctor ausspuckt, vielleicht einfach löschen?
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Keiner 'ne Idee zur Lösung / Umgehung des Problems?
Ich überlege inzwischen sogar, ob ich mir eine Linux-Distribution entweder in VirtualBox oder auf eine Partition zu installieren, um dort in Python zu programmieren, falls dort die Modul-Installation von MySQL reibungsloser klappt...
Windows habe ich kein aktuelles mehr, das einzige Windows, das ich noch habe, ist XP.
BlackJack

@Hendy84: Vielleicht tut es ja auch eine andere Anbindung an MySQL‽ Zum Beispiel den „MySQL Connector/Python“ direkt vom MySQL-Projekt selbst, oder `oursql`.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@Hendy84: wenn du eine "verbastelte" Python-Installation hast, dann ist das halt für Aussenstehend sehr schwer nachzuvollziehen, was bei dir im System wirklich passiert.

Keine Ahnung, ob das bei MacOS möglich ist, aber kannst du nicht alle Pythons sauber deinstallieren und aus einer Quelle neu installieren?

Gruß, noisefloor
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Deinstalliert habe ich die alten Python-Installationen gestern, es bleiben dann noch diese Framework-Reste in der Library, die werde ich heute Abend nochmal über das Terminal versuchen zu entfernen, dann mal gucken...

Und vielen Dank für den Tipp mit den anderen MySQL-Anbindungen, schaue ich mir mal an.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst auch das ganze auch mal in einem "virtual environment" testen. Das lässt sich unter Python 3.6 wie folgt anlegen:

Code: Alles auswählen

python3 -m venv /home/BENUTZER/python-test 
Den Pfad musst du halt den Gegenheiten von MaCOS anpassen.

Nach der Aktivierung des virtual environmet solltest du darin ein saubere Python Library Config haben, weil außer den Modulen, die Python an Bord hat, nicht weiter darin mitinstalliert wird.

Gruß, noisefloor
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

noisefloor hat geschrieben:Hallo,

du kannst auch das ganze auch mal in einem "virtual environment" testen. Das lässt sich unter Python 3.6 wie folgt anlegen:

Code: Alles auswählen

python3 -m venv /home/BENUTZER/python-test
Den Pfad musst du halt den Gegenheiten von MaCOS anpassen.

Nach der Aktivierung des virtual environmet solltest du darin ein saubere Python Library Config haben, weil außer den Modulen, die Python an Bord hat, nicht weiter darin mitinstalliert wird.

Gruß, noisefloor
Danke, das werde ich heute Abend auch mal ausprobieren!
BlackJack

@noisefloor: Genau dieses Problem ist ja kein Einzelfall und das sieht auch nicht nach verbasteltem Python aus, sondern das mit den „MySQL Connector/C“-Dateien unter `/etc/` etwas nicht stimmt. Da sollte eigentlich drinstehen welche C-Linkerflags verwendet wurden/werden müssen, da steht aber nur ein '… -l ' ohne einen Bibliotheksnamen hinter dem -l und darüber stolpert dann die `setup.py` vom PyMySQL-Package was eben versucht da etwas auszulesen was nicht da ist.

Der Autor von PyMySQL hat die Leute im Issue-Tracker jedenfalls gebeten mit dem Problem bei den homebrew und/oder MySQL-Leuten nachzufragen warum die Linkerflags dort nicht vollständig sind.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@BlackJack: nee, dann funktioniert das im virtuel env auch nicht. Woher ziehst du eigentlich dein Erkenntnis? Ich habe dazu in den StackTraces nichts gesehen (oder übersehen...).

Gruß, noisefloor
BlackJack

@noisefloor: Der Issue bei Github und bei StackExchange sieht man das die Frage kein Einzelfall ist.
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Hab es nochmal in einer virtualenv probiert, aber wieder das Resultat:

Code: Alles auswählen

(venv) macbook-pro:python-test ...$ pip3 install mysqlclient
Collecting mysqlclient
  Using cached mysqlclient-1.3.10.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-s9rnt_nb/mysqlclient/setup.py", line 17, in <module>
        metadata, options = get_config()
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-s9rnt_nb/mysqlclient/setup_posix.py", line 54, in get_config
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-s9rnt_nb/mysqlclient/setup_posix.py", line 54, in <listcomp>
        libraries = [dequote(i[2:]) for i in libs if i.startswith('-l')]
      File "/private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-s9rnt_nb/mysqlclient/setup_posix.py", line 12, in dequote
        if s[0] in "\"'" and s[0] == s[-1]:
    IndexError: string index out of range
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/22/q7m4hq294z56nt2qvvzy5t8c0000gn/T/pip-build-s9rnt_nb/mysqlclient/
Hendy84
User
Beiträge: 22
Registriert: Samstag 3. Juni 2017, 19:23

Gibt es inzwischen Neuigkeiten hinsichtlich der Funktionalität des MySQL-Moduls unter Python 3.6.1. unter OS X?
Ansonsten kann ich mein Python-Buch quasi nicht weiter durcharbeiten, weil so Vieles auf die MySQL-Verwendung unter Python 3.x basiert und mich das ja auch sehr interessiert.
Ansonsten bliebe mir wohl nichts anderes übrig, als zu hoffen, dass ich mir irgendwann wieder einen Windows PC leisten kann, damit das reibungslos funktioniert, oder?
Antworten