Irgendein Hintergrund: Wir haben eine Codebasis in Python 3 geschrieben, die Pyramid und das SqlAlchemy ORM verwendet, um in einer MySQL-Datenbank zu persistieren. Um Tests für unsere Klassen mit dem ORM zu schreiben, verwenden wir Sqlite. All dies funktioniert gut zusammen ... vor Ort.
Wenn wir unseren Jenkins (Ubuntu) -Server einrichten, um die Testsuite zu starten, stoßen wir innerhalb eines virtualenv auf ein Problem. Die Tests werden wie folgt ausgeführt:
%Vor%Tests ohne ORM sind in Ordnung. Diejenigen mit dem ORM werfen diesen Fehler:
%Vor%Die Überprüfung auf sqlite3 (innerhalb des virtualenv) ist erfolgreich:
%Vor%Es ist auch außerhalb des virtualenv erfolgreich. Wir haben versucht, alle sqlite-Pakete, sqlite-dev, etc. zu installieren und neu zu installieren. Angeblich ist die Sqlite-Bibliothek Teil von Python 3, aber warum kann sie dann nicht gefunden werden, wenn die Tests ausgeführt werden?
Sie vermissen das sqlite3 Python-Modul, das Sie überprüfen können mit:
%Vor% Der Befehl which sqlite3
zeigt nur an, dass das Befehlszeilentool sqlite3
installiert ist . Dies ist nicht das, was Python verwendet. Es verwendet die libsqlite3
shared library (die auch vom Befehlszeilentool verwendet wird). Wenn es fehlt, bedeutet das, dass Python beim Erstellen von Python die SQLite-Entwicklungskopfzeilen nicht finden konnte.
Unter Ubuntu müssen Sie libsqlite3-dev
installieren, um diese Header zu erhalten.
Möglicherweise fehlen Ihnen andere Abhängigkeiten. Unter Ubuntu würde ich installieren:
%Vor% Einige davon sind Accelerator-Pakete; Python funktioniert ohne sie, aber einige Module sind langsamer (zB decimal
ohne die mpdecimal
-Bibliothek ).
Vielleicht möchten Sie die Ubuntu Python 3.4-Quellpaketabhängigkeiten für Ihre Ubuntu-Version überprüfen.
Unter Debian Buster habe ich das gleiche Problem mit python3.6 entdeckt, obwohl python3.5 sqlite3 erfolgreich importiert hat. Und obwohl das sqlite3-Modul installiert war und für python3.6 verfügbar sein sollte. Meine Lösung war,
auszuführen %Vor%Aus irgendeinem Grund, den ich noch nicht bestimmt habe, wird das Modulverzeichnis für python3.6 nicht korrekt für sqlite3 geladen. Diese Lösung funktionierte sowohl innerhalb als auch außerhalb von virtuellen Umgebungen.
Tags und Links python-3.x sqlalchemy sqlite3