Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
13.05.2021, 07:55:32

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
  • Mitglieder insgesamt: 25585
  • Letzte: x-dd
Statistiken
  • Beiträge insgesamt: 734897
  • Themen insgesamt: 59204
  • Heute online: 446
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema:  MariaDB in python: keines der installierten Module lässt sich importieren  (Gelesen 451 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Da in diesem Teil des Forums bereits python Fragen stehen, schließe ich mich an - in der Hoffnung, dass ich richtig gelandet bin. Falls nicht, bitte ich um Entschuldigung.

Zu meiner Frage:

Ich möchte in python3 eine Verbindung zu einer Maria-DB Datenbank herstellen. Leider bekomme ich hierzu weder das Modul mariadb noch mysql importiert. Es kommt jeweils die ModuleNotFound Fehlermeldung. Jedoch sind beide Module installiert, wie ich mit Hilfe von help() feststellte.

Bei mariadb kommt allerdings eine Fehlermeldung, die mir nicht viel sagt:

problem in mariadb - ImportError: /home/wolfgang/.local/lib/python3.7/site-packages/mariadb/_mariadb.cpython-37m-x86_64-linux-gnu.so: symbol mariadb_field_attr version libmariadb_3 not defined in file libmariadb.so.3 with link time reference

Dazu muss ich sagen, dass schon die Installation des mariadb-Moduls nicht einfach war. Bevor ich das mit pip3 installieren konnte, musste ich erst den MariaDBConnector/C manuell installieren, da die Version, die mein System zur Verfügung stellte zu alt war. Danach konnte ich zwar mariadb installieren, aber dennoch scheint da was nicht erkannt worden sein.

Warum mysql allerdings nicht geht - keine Ahnung.

Was würdet ihr tun, um das Problem weiter einzugrenzen und ggf. eine Lösung zu finden? Für die Hilfe danke ich.



Dazu muss ich sagen, dass schon die Installation des mariadb-Moduls nicht einfach war. Bevor ich das mit pip3 installieren konnte, musste ich erst den MariaDBConnector/C manuell installieren, da die Version, die mein System zur Verfügung stellte zu alt war. Danach konnte ich zwar mariadb installieren, aber dennoch scheint da was nicht erkannt worden sein.
Was hast du wie gemacht?

Ich konnte MariaDB Connector/Python wie folgt installieren.
https://mariadb.com/docs/clients/connector-python/#installing-from-pypi
https://mariadb.com/docs/clients/connector-c/#install-via-apt-debian-ubuntu
apt install libmariadb3 libmariadb-dev
sudo pip3 install mariadb

Eine Beispielanwendung habe ich jetzt nicht versucht.

Besser

pip3 install mariadb
pip mit sudo sollte man vermeiden.

Ok, dann habe ich da vielleicht was falsch gemacht. Ich habe das nach einer Anleitung gemacht, die ich auf stack-overflow gefunden habe. Ich schreibe Sie mal in kursiv drunter:

After you download MariaDB Connector/C, untar and cd. Then mv the executable first.

sudo mv -f bin/mariadb_config /usr/bin/

Next, if you execute mariadb_config, you will know where to put header and library files to build wheel for mariadb.

For example,

Ubuntu 18.04

sudo mv -f include/mariadb /usr/local/include/
sudo mv -f lib/mariadb     /usr/local/lib/

Ubuntu 20.04

sudo mv -f include/mariadb /usr/include/
sudo mv -f lib/mariadb     /usr/lib/

Finally, I could pip install mariadb.

After, in the case you cannot import mariadb,

export LD_LIBRARY_PATH=/PATH/TO/where/you/mv/lib/mariad


Kann man das Ganze irgendwie rückgängig machen und nochmal neu aufsetzen? Ich vermute, dass da irgendwelche Dateien/Bibliotheken nicht da sind, wo sie hingehören.

Danke euch für eure Antworten übrigens

Kann man das Ganze irgendwie rückgängig machen und nochmal neu aufsetzen?
Sieht schwierig aus, weil du Dateien in /usr/bin/, /usr/include/ und /usr/lib/ überschrieben hattest.

Ok, das verstehe ich. Kann man trotzdem das Ganze irgendwie noch retten oder python neu installieren?

Ok, das verstehe ich. Kann man trotzdem das Ganze irgendwie noch retten oder python neu installieren?
Mit Timeshift auf einen Zeitpunkt davor zurückkehren.

Edit: Evtl. funktioniert
pip3 uninstall mariadb
sudo apt-get --reinstall install libmariadb3 libmariadb-dev
pip3 install mariadb
« Letzte Änderung: 10.04.2021, 11:55:34 von pinky »

Vielen Dank dir. Jetzt bin ich schonmal ein Stückchen weiter.

Nun kann ich allerdings mariadb nicht installieren, weil, wenn ich die Fehlermeldung richtig interpretiere, auf dem System eine zu alte Version des MariaDB Connectors vorliegt. (Das war übrigens auch der Grund, weshalb ich die Anleitung genutzt habe, die ich gestern gepostet habe).

Hier mal die Fehlermeldung im Wortlaut. Vielleicht gibt es ja eine andere Möglichkeit, den Connector zu updaten. Das, was ich gefunden habe, ging ja offenbar schief.

ERROR: Command errored out with exit status 2:
     command: /usr/local/bin/python3.7 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-o7el57hv/mariadb/setup.py'"'"'; __file__='"'"'/tmp/pip-install-o7el57hv/mariadb/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-o7el57hv/mariadb/pip-egg-info
         cwd: /tmp/pip-install-o7el57hv/mariadb/
    Complete output (1 lines):
    MariaDB Connector/Python requires MariaDB Connector/C >= 3.1.5, found version 3.0.3
    ----------------------------------------
ERROR: Command errored out with exit status 2: python setup.py egg_info Check the logs for full command output.

Welches LM hast du denn?
inxi -FKann man vielleicht auch mit dem MySQL Connector auf die MariaDB zugreifen?
apt install python3-mysql.connector

Hallo pinky

inxi -F ergibt diese Ausgabe:

System:    Host: laptop-GF72-8RE Kernel: 4.15.0-20-generic x86_64 bits: 64
           Desktop: MATE 1.20.1  Distro: Linux Mint 19 Tara
Machine:   Device: laptop System: Micro-Star product: GF72 8RE v: REV:1.0 serial: N/A
           Mobo: Micro-Star model: MS-179E v: REV:1.0 serial: N/A
           UEFI: American Megatrends v: E179EIMS.107 date: 05/22/2018
Battery    BAT1: charge: 41.4 Wh 95.2% condition: 43.5/43.2 Wh (101%)
CPU:       6 core Intel Core i7-8750H (-MT-MCP-) cache: 9216 KB
           clock speeds: max: 4100 MHz 1: 800 MHz 2: 800 MHz 3: 800 MHz
           4: 799 MHz 5: 800 MHz 6: 800 MHz 7: 800 MHz 8: 800 MHz 9: 800 MHz
           10: 800 MHz 11: 800 MHz 12: 800 MHz
Graphics:  Card-1: Intel Device 3e9b
           Card-2: NVIDIA GP106M [GeForce GTX 1060 Mobile]
           Display Server: x11 (X.Org 1.19.6 )
           drivers: modesetting (unloaded: fbdev,vesa)
           Resolution: 1920x1080@60.00hz
           OpenGL: renderer: Mesa DRI Intel HD Graphics (Coffeelake 3x8 GT2)
           version: 4.5 Mesa 18.0.5
Audio:     Card Intel Cannon Lake PCH cAVS driver: snd_hda_intel
           Sound: Advanced Linux Sound Architecture v: k4.15.0-20-generic
Network:   Card-1: Intel Wireless-AC 9560 [Jefferson Peak] driver: iwlwifi
           IF: wlo1 state: up mac: c0:b6:f9:75:6b:b0
           Card-2: Qualcomm Atheros Killer E2400 Gigabit Ethernet Controller
           driver: alx
           IF: enp3s0 state: down mac: 30:9c:23:92:cf:a8
Drives:    HDD Total Size: 2000.4GB (4.3% used)
           ID-1: /dev/nvme0n1 model: Samsung_SSD_970_EVO_1TB size: 1000.2GB
           ID-2: /dev/sda model: WDC_WD10SPZX size: 1000.2GB
Partition: ID-1: / size: 115G used: 80G (74%) fs: ext4 dev: /dev/nvme0n1p5
RAID:      No RAID devices: /proc/mdstat, md_mod kernel module present
Sensors:   System Temperatures: cpu: 58.0C mobo: N/A
           Fan Speeds (in rpm): cpu: N/A
Info:      Processes: 304 Uptime: 8 min Memory: 1266.5/40074.7MB
           Client: Shell (bash) inxi: 2.3.56

Mit dem install-Befehl ließ sich ein Connector installieren. Aber "import mariadb" bringt weiterhin kein Ergebnis.

Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  libcec4 libcrossguid0 libfstrcmp0 libmicrohttpd12 libnvidia-common-410
  libp8-platform2 libphonon4qt5-4 libqjson0 libqt4-declarative libqt4-network
  libqt4-script libqt4-sql libqt4-xml libqt4-xmlpatterns libqt5script5
  libqtcore4 libqtdbus4 libqtgui4 libquvi-0.9-0.9.3 libquvi-scripts-0.9
  libshairplay0 libshout-idjc3 libtinyxml2.6.2v5 libzita-alsa-pcmi0
  libzita-resampler1 lua-bitop lua-expat lua-json lua-lpeg lua-socket
  python-bluez python-cryptodome python-irc python-pil python-simplejson
  qtcore4-l10n quvi screen-resolution-extra uuid-dev
Verwenden Sie »sudo apt autoremove«, um sie zu entfernen.
Die folgenden NEUEN Pakete werden installiert:
  python3-mysql.connector
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 32 nicht aktualisiert.
Es müssen 98,2 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 616 kB Plattenplatz zusätzlich benutzt.
Holen:1 http://archive.ubuntu.com/ubuntu bionic/universe amd64 python3-mysql.connector all 2.1.6-1 [98,2 kB]
Es wurden 98,2 kB in 0 s geholt (385 kB/s).     
Vormals nicht ausgewähltes Paket python3-mysql.connector wird gewählt.
(Lese Datenbank ... 315747 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../python3-mysql.connector_2.1.6-1_all.deb ...
Entpacken von python3-mysql.connector (2.1.6-1) ...
python3-mysql.connector (2.1.6-1) wird eingerichtet ...

Linux Mint 19 Tara könntest du mal aktualisieren.

Mit dem install-Befehl ließ sich ein Connector installieren. Aber "import mariadb" bringt weiterhin kein Ergebnis.
Nicht "import mariadb", stattdessen "import mysql.connector". Einfach mal nach einem Tutorial im Netz suchen.

Super, das hat geklappt :)

Das Problem war, dass in den Tutorials, die ich gefunden habe (und auch in der mariadb-Dokumentation) mit import mariadb  gearbeitet wird.

Das Problem war, dass in den Tutorials, die ich gefunden habe (und auch in der mariadb-Dokumentation) mit import mariadb  gearbeitet wird.
Ja, aber der mariadb Connector lies sich ja nicht installieren. Du musst jetzt nach "python3 mysql connector tutorial" oder so suchen bzw. "umdenken".

Ok, aber wenn das importieren geht, funktioniert das Programmieren doch trotzdem genauso: also Verbindung herstellen, cursor anlegen, der dann die SQL-Befehle ausführt, verbindung schließen ...