Sqlite load_extension fehlgeschlagen für spatialite in Python

8

Ich versuche die Spatialite Beta Version 3.0 zu benutzen, weil ich sie benutze Windows 7 auf einem 64-Bit-Rechner.

Ich bekomme immer den gefürchteten sqlite3.OperationalError: The specified module could not be found. Fehler, wenn ich versuche, zu laden libspatialite-4.dll .

Ich habe Folgendes versucht:

  • Setzen Sie libspatialite-4.dll und alle anderen DLLs in den gleichen Ordner
  • verwende den vollständigen Pfad zu den dlls
  • Fügen Sie die DLL-Position zur 'PATH' -Umgebungsvariablen
  • hinzu
  • fügt die DLL-Position als Teil des Python-Codes
  • an das sys.path-Attribut an
  • Kopieren Sie alle DLLs in den Ordner c:\windows\system32 (komplett mit Neustart des Rechners)
  • Kopiere alle dlls im c:\windows\sysWoW64 Ordner (komplett mit Neustart der Maschine, dies sollte für 32 Bit dlls sein, aber ich habe es trotzdem versucht)

Mein Code ist wie folgt:

%Vor%

HINWEIS - Ich habe den ganzen Weg auch ohne Glück versucht. Ich erinnere mich daran zu haben das gleiche Problem mit Windows XP 32-Bit. Ich habe es funktioniert, kann aber nicht Erinnere dich daran, was ich getan habe: (

AKTUALISIEREN

Ich habe das Setup auf 32-Bit-Windows 7 getestet und alle DLLs im System32-Ordner installiert. Dies deutet darauf hin, dass ein Problem mit dem 64-Bit-Setup vorliegt. Könnte es sein, dass ich eine andere Version von MSVC brauche (ich glaube nicht, dass die Spatialite-Website sagt, was notwendig ist, damit ich vielleicht raten muss - ich habe MSVC2010 installiert)?

    
MappaGnosis 21.12.2011, 13:31
quelle

4 Antworten

2

Ich hatte das gleiche Problem und es hat mich tagelang verwirrt. Ich verwende Python 2.6 (32-Bit) unter Windows 7 (x64), daher ist es möglicherweise nicht die gleiche Konfiguration wie bei Ihnen.

Folgendes können Sie ausprobieren (aus diesem Google Groups-Post ):

  1. Setzen Sie die spatialite-DLLs (libgeos_c-1.dll, libgeos-3-0-0.dll, libproj-0.dll und libspatialite-2.dll) in einen Ordner auf dem Laufwerk C: /.
  2. Fügen Sie diesen Ordner Ihrem PATH hinzu.

Die Probleme scheinen zu sein, dass Windows die dlls nicht von C: \ Windows \ system32 wegen der Benutzerberechtigungseinstellungen lädt.

    
Castrona 08.06.2012 21:11
quelle
1
___ answer11744290 ___

Ich habe kürzlich einen Alptraum von einem x64 Build von Pyspatialite 3.0.1 und all seinen abhängigen Bibliotheken durchgemacht. Es kann gemacht werden, aber braucht ein paar "Optimierungen", um es richtig zu machen.

Beachten Sie zuerst die Problemumgehung, die zum Kompilieren von spatialite.c erforderlich ist:

Pyspatialite 3.0.1 Problem # 7 Kommentar # 3

Zweitens schlage ich vor, dass Sie mit MSVC 2008 / SDK 7.0 x64 kompilieren, womit Python 2.7 x64 kompiliert wird. Ich habe viel Ärger mit dem Versuch bekommen, Dinge kompilieren zu lassen, als ich die Abhängigkeits-Bibliotheken mit mingw-w64 kompiliert habe.

iconv (v. 1.9.2) und proj4 (v. 4.8.0) scheinen beide gut zu kompilieren und zu installieren; Sie können jedoch Probleme mit dem neuesten GEOS svn_trunk (v. 3.3.5) bekommen. Beachten Sie die folgenden Links für Problemumgehungen / Updates ...

OSGEO GEOS TRAC Ticket # 574

OSGEO GEOS TRAC Ticket # 577

Wenn Sie die zwei Makefiles von 577 herunterladen, enthalten sie das Update in 574.

Sie möchten auch einen der nächtlichen Snapshots herunterladen und das Verzeichnis geos / src / triangulate vor dem Kompilieren in Ihren Build-Ordner kopieren, da es im svn_trunk fehlt.

Schließlich möchten Sie eine kleine Änderung an geos / src / dirlist.mk vornehmen:

Fügen Sie in Zeile 45 'triangulate \' (keine Anführungszeichen) direkt unterhalb von 'simplify' und oberhalb von 'util' hinzu.

Wenn Sie jetzt kompilieren, sehen Sie möglicherweise einige Warnungen, aber der Build sollte nicht direkt fehlschlagen ...

%Vor%

Das kümmert sich um Ihre Lib-Abhängigkeiten. Jetzt müssen Sie eines von zwei Dingen tun:  1. Erstellen Sie entweder eine setup.cfg-Datei in Ihrem pyspatialite-Build-Ordner und fügen Sie die Pfade / bin, / lib und / include hinzu, oder  2. Bearbeiten Sie die Datei pyspatialite setup.py direkt und machen Sie dasselbe.

Ich fand es am einfachsten, die Datei setup.py direkt zu bearbeiten und die Pfade zu den Abhängigkeits-Bibliotheken hinzuzufügen, um ähnlich zu sehen:

%Vor%

Wenn nach diesen Änderungen pyspatialite immer noch nicht für Sie erstellt werden kann, nehmen Sie eine weitere Reihe von Änderungen an setup.py vor: Um Zeile 121 fügen Sie die folgenden Zeilen hinzu ...

%Vor%

Denken Sie daran, die Pfade zu ersetzen, damit sie zu Ihrer speziellen Konfiguration passen. Das sollte es tun. Nachdem Sie 'python setup.py install' ausgeführt haben, sollte alles funktionieren.

Sie können alle Tests in ../Python27/Lib/site-packages/pyspatialite/test ausführen - sie alle bestanden für mich; Ein besserer, realistischerer Test könnte jedoch sein, den Beispielcode über diesen Link auszuführen:

SpatiaLite und Python

Die Schritte, auf die der Autor eingeht, decken die Details nicht ab, um die Abhängigkeits-Bibliotheken in einer x64-Bit-Umgebung zu erhalten, und ich fand sie nicht besonders nützlich, da pyspatialite 3.0.1 nun automatisch die entsprechende Version von die Verschmelzung der Räumlichkeit zum Download. Der Beispielcode auf der Site erstellt eine Spatialite-Datenbankdatei und füllt sie mit Tausenden von Einträgen. Alles lief erfolgreich für mich; Daher glaube ich, dass die oben beschriebene Methode, um einen x64-Build von Pyspatialite zu erhalten, funktioniert.

Viel Glück!

-RMWChaos

    
___ qstntxt ___

Ich versuche die Spatialite Beta Version 3.0 zu benutzen, weil ich sie benutze Windows 7 auf einem 64-Bit-Rechner.

Ich bekomme immer den gefürchteten sqlite3.dll Fehler, wenn ich versuche, zu laden sqlite-dll-win32-x86-[version].zip .

Ich habe Folgendes versucht:

  • Setzen Sie mod_spatialite-[version]-win-x86.7z und alle anderen DLLs in den gleichen Ordner
  • verwende den vollständigen Pfad zu den dlls
  • Fügen Sie die DLL-Position zur sqlite3.dll -Umgebungsvariablen
  • hinzu
  • fügt die DLL-Position als Teil des Python-Codes
  • an das sys.path-Attribut an
  • Kopieren Sie alle DLLs in den Ordner sqlite3_old.dll (komplett mit Neustart des Rechners)
  • Kopiere alle dlls im %code% Ordner (komplett mit Neustart der Maschine, dies sollte für 32 Bit dlls sein, aber ich habe es trotzdem versucht)

Mein Code ist wie folgt:

%Vor%

HINWEIS - Ich habe den ganzen Weg auch ohne Glück versucht. Ich erinnere mich daran zu haben das gleiche Problem mit Windows XP 32-Bit. Ich habe es funktioniert, kann aber nicht Erinnere dich daran, was ich getan habe: (

AKTUALISIEREN

Ich habe das Setup auf 32-Bit-Windows 7 getestet und alle DLLs im System32-Ordner installiert. Dies deutet darauf hin, dass ein Problem mit dem 64-Bit-Setup vorliegt. Könnte es sein, dass ich eine andere Version von MSVC brauche (ich glaube nicht, dass die Spatialite-Website sagt, was notwendig ist, damit ich vielleicht raten muss - ich habe MSVC2010 installiert)?

    
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend. ___ qstnhdr ___ Sqlite load_extension fehlgeschlagen für spatialite in Python ___ answer10956090 ___

Ich hatte das gleiche Problem und es hat mich tagelang verwirrt. Ich verwende Python 2.6 (32-Bit) unter Windows 7 (x64), daher ist es möglicherweise nicht die gleiche Konfiguration wie bei Ihnen.

Folgendes können Sie ausprobieren (aus diesem Google Groups-Post ):

  1. Setzen Sie die spatialite-DLLs (libgeos_c-1.dll, libgeos-3-0-0.dll, libproj-0.dll und libspatialite-2.dll) in einen Ordner auf dem Laufwerk C: /.
  2. Fügen Sie diesen Ordner Ihrem PATH hinzu.

Die Probleme scheinen zu sein, dass Windows die dlls nicht von C: \ Windows \ system32 wegen der Benutzerberechtigungseinstellungen lädt.

    
___ answer3367491 ___

Die Version von %code% , die in Python enthalten ist, scheint nicht gut mit Spatialite spielen zu wollen. Das einzige, was ich zur Arbeit bringen konnte (kurz, alles aus der Quelle zu kompilieren) war:

  1. Herunterladen SQLite (oder cyqlite - eine Neukompilierung von SQLite für Windows mit einigen nützlichen Funktionen wie R-Tree, so dass Sie Spaital-Indizes ausführen können, zB %code%
  2. Laden Sie mod_spatialite herunter (Windows-Binärdateien befinden sich in der pinkfarbenen Box unten auf der Seite), dh %code%
  3. Entpacken Sie zuerst SQLite / cyqlite dann mod_spatialite in den gleichen Ordner ( Überschreiben, wenn Konflikte auftreten.
  4. Fügen Sie diesen Ordner Ihrem Systempfad
  5. hinzu
  6. Benennen Sie das %code% in Ihrem Python-DLLs-Verzeichnis in etwas wie %code% um, so dass Python das neue auf Ihrem Pfad verwendet

Siehe diesen Blogbeitrag für weitere Informationen.

    
___ tag123sqlite ___ SQLite ist eine Softwarebibliothek, die eine eigenständige, serverlose Transaktions-SQL-Datenbank-Engine ohne Konfiguration implementiert. ___ answer16242023 ___

Ich habe das gelöst, indem ich die Anweisungen im letzten Post hier befolge. Mein System war, wie oben beschrieben, Win7 64bit mit 32-Bit-Spatialite-Bibliotheken und die Pysqlite-Bibliothek für Python. Ich verlinkte mit der sqlite3.dll in meinem DLLs-Verzeichnis (das ist das Python, das ArcGIS installiert, so leicht anders als bei anderen Installationen).

Dies löste das Problem mit dem Laden von Spatialite 4 dll über pysqlite.

    
___ tag123spatialite ___ Spatialite ist eine Bibliothek, die den grundlegenden SQLite-Kern erweitert, um ein vollwertiges Spatial DBMS zu erhalten. ___
StacyR 12.11.2015 08:50
quelle
0

Ich habe kürzlich einen Alptraum von einem x64 Build von Pyspatialite 3.0.1 und all seinen abhängigen Bibliotheken durchgemacht. Es kann gemacht werden, aber braucht ein paar "Optimierungen", um es richtig zu machen.

Beachten Sie zuerst die Problemumgehung, die zum Kompilieren von spatialite.c erforderlich ist:

Pyspatialite 3.0.1 Problem # 7 Kommentar # 3

Zweitens schlage ich vor, dass Sie mit MSVC 2008 / SDK 7.0 x64 kompilieren, womit Python 2.7 x64 kompiliert wird. Ich habe viel Ärger mit dem Versuch bekommen, Dinge kompilieren zu lassen, als ich die Abhängigkeits-Bibliotheken mit mingw-w64 kompiliert habe.

iconv (v. 1.9.2) und proj4 (v. 4.8.0) scheinen beide gut zu kompilieren und zu installieren; Sie können jedoch Probleme mit dem neuesten GEOS svn_trunk (v. 3.3.5) bekommen. Beachten Sie die folgenden Links für Problemumgehungen / Updates ...

OSGEO GEOS TRAC Ticket # 574

OSGEO GEOS TRAC Ticket # 577

Wenn Sie die zwei Makefiles von 577 herunterladen, enthalten sie das Update in 574.

Sie möchten auch einen der nächtlichen Snapshots herunterladen und das Verzeichnis geos / src / triangulate vor dem Kompilieren in Ihren Build-Ordner kopieren, da es im svn_trunk fehlt.

Schließlich möchten Sie eine kleine Änderung an geos / src / dirlist.mk vornehmen:

Fügen Sie in Zeile 45 'triangulate \' (keine Anführungszeichen) direkt unterhalb von 'simplify' und oberhalb von 'util' hinzu.

Wenn Sie jetzt kompilieren, sehen Sie möglicherweise einige Warnungen, aber der Build sollte nicht direkt fehlschlagen ...

%Vor%

Das kümmert sich um Ihre Lib-Abhängigkeiten. Jetzt müssen Sie eines von zwei Dingen tun:  1. Erstellen Sie entweder eine setup.cfg-Datei in Ihrem pyspatialite-Build-Ordner und fügen Sie die Pfade / bin, / lib und / include hinzu, oder  2. Bearbeiten Sie die Datei pyspatialite setup.py direkt und machen Sie dasselbe.

Ich fand es am einfachsten, die Datei setup.py direkt zu bearbeiten und die Pfade zu den Abhängigkeits-Bibliotheken hinzuzufügen, um ähnlich zu sehen:

%Vor%

Wenn nach diesen Änderungen pyspatialite immer noch nicht für Sie erstellt werden kann, nehmen Sie eine weitere Reihe von Änderungen an setup.py vor: Um Zeile 121 fügen Sie die folgenden Zeilen hinzu ...

%Vor%

Denken Sie daran, die Pfade zu ersetzen, damit sie zu Ihrer speziellen Konfiguration passen. Das sollte es tun. Nachdem Sie 'python setup.py install' ausgeführt haben, sollte alles funktionieren.

Sie können alle Tests in ../Python27/Lib/site-packages/pyspatialite/test ausführen - sie alle bestanden für mich; Ein besserer, realistischerer Test könnte jedoch sein, den Beispielcode über diesen Link auszuführen:

SpatiaLite und Python

Die Schritte, auf die der Autor eingeht, decken die Details nicht ab, um die Abhängigkeits-Bibliotheken in einer x64-Bit-Umgebung zu erhalten, und ich fand sie nicht besonders nützlich, da pyspatialite 3.0.1 nun automatisch die entsprechende Version von die Verschmelzung der Räumlichkeit zum Download. Der Beispielcode auf der Site erstellt eine Spatialite-Datenbankdatei und füllt sie mit Tausenden von Einträgen. Alles lief erfolgreich für mich; Daher glaube ich, dass die oben beschriebene Methode, um einen x64-Build von Pyspatialite zu erhalten, funktioniert.

Viel Glück!

-RMWChaos

    
RMWChaos 31.07.2012 16:00
quelle
0

Ich habe das gelöst, indem ich die Anweisungen im letzten Post hier befolge. Mein System war, wie oben beschrieben, Win7 64bit mit 32-Bit-Spatialite-Bibliotheken und die Pysqlite-Bibliothek für Python. Ich verlinkte mit der sqlite3.dll in meinem DLLs-Verzeichnis (das ist das Python, das ArcGIS installiert, so leicht anders als bei anderen Installationen).

Dies löste das Problem mit dem Laden von Spatialite 4 dll über pysqlite.

    
Stev_k 26.04.2013 17:26
quelle

Tags und Links