Ошибка Sqlite load_extension для пространственных объектов в Python

Я пытаюсь использовать бета-версию Spatialite 3.0, потому что я использую Windows 7 на 64-битной машине.

Я постоянно получаю страшный sqlite3.OperationalError: The specified module could not be found. когда я пытаюсь загрузить libspatialite-4.dll .

Я пробовал следующее:

  • поместите libspatialite-4.dll и все остальные DLL в одну папку
  • использовать полный путь к dlls
  • добавьте расположение dll в 'PATH' среды 'PATH'
  • добавьте расположение dll в атрибут sys.path как часть кода Python
  • скопируйте все DLL в папку c:\windows\system32 (в комплекте с перезапуском машины)
  • скопируйте все c:\windows\sysWoW64 папку c:\windows\sysWoW64 (в комплекте с перезагрузкой машины это должно быть для 32-разрядных библиотек DLL, но я все равно попробовал)

мой код выглядит следующим образом:

 import sqlite3 conn = sqlite3.connect(":memory:") conn.enable_load_extension(True) conn.execute('SELECT load_extension("libspatialite-4.dll")') 

ПРИМЕЧАНИЕ. Я тоже пробовал полный путь, не повезло. Я помню, что у меня такая же проблема с 32-разрядной Windows XP. Я получил его работу, но не могу вспомнить, что я сделал 🙁

ОБНОВИТЬ

Я протестировал установку на 32-разрядной Windows 7 и поместил все DLL в папку System32. Таким образом, это говорит о наличии проблемы с 64-разрядной настройкой. Может быть, мне нужна другая версия MSVC (я не думаю, что сайт Spatialite говорит, что это необходимо, поэтому мне просто нужно угадать – у меня установлен MSVC2010)?

4 Solutions collect form web for “Ошибка Sqlite load_extension для пространственных объектов в Python”

У меня была такая же проблема, и я смутил меня в течение нескольких дней. Я запускаю Python 2.6 (32-разрядный) в Windows 7 (x64), поэтому может быть не такой, как у вас.

Вот что вы можете попробовать (взято из этой записи в Google Groups ):

  1. Поместите пространственные DLL (libgeos_c-1.dll, libgeos-3-0-0.dll, libproj-0.dll и libspatialite-2.dll) в папку на диске C: /.
  2. Добавьте эту папку в свой PATH.

Проблема заключается в том, что Windows может не загружать DLL из C: \ Windows \ system32 из-за настроек пользовательских разрешений.

Версия sqlite3.dll включенная в Python, похоже, не хочет играть с Spatialite. Единственное, что я мог получить (не компилируя все из исходников), было:

  1. Загрузите SQLite (или cyqlite – перекомпилируйте SQLite для Windows с некоторыми удобными функциями, такими как R-Tree, чтобы вы могли делать спаинные индексы), то есть sqlite-dll-win32-x86-[version].zip
  2. Загрузите mod_spatialite (двоичные файлы Windows находятся в розовом поле внизу страницы), то есть mod_spatialite-[version]-win-x86.7z
  3. Распакуйте сначала SQLite / cyqlite, затем mod_spatialite в ту же папку (перезапишите, если есть какие-либо конфликты)
  4. Добавьте эту папку в свою систему.
  5. Переименуйте sqlite3.dll который находится в вашем каталоге DLL Python, к чему-то вроде sqlite3_old.dll , так что Python будет использовать новый на вашем пути

См. Это сообщение в блоге для получения дополнительной информации.

Недавно я пережил кошмар x64 build of pyspatialite 3.0.1 и всех его зависимых библиотек. Это можно сделать, но требует некоторой «настройки», чтобы все было правильно.

Во-первых, обратите внимание на обходное решение, которое может потребоваться для компиляции объединения пространственных объектов:

Pyspatialite 3.0.1 Проблема № 7 Комментарий № 3

Во-вторых, я предлагаю вам скомпилировать с MSVC 2008 / SDK 7.0 x64, что и скомпилировано с Python 2.7 x64. Я столкнулся с большой проблемой, пытаясь заставить вещи скомпилироваться сразу, когда я скомпилировал библиотеки зависимостей с помощью mingw-w64.

iconv (v. 1.9.2) и proj4 (v. 4.8.0) оба, похоже, компилируются и устанавливаются просто отлично; однако вы можете столкнуться с некоторыми проблемами, используя последнюю версию GEOS svn_trunk (v. 3.3.5). Обратите внимание на следующие ссылки для обходных решений / исправлений …

Билет № 574 OSGEO GEOS TRAC

Билет «OSGEO GEOS TRAC» № 577

Если вы загружаете два файла make-файлов из 577, они включают исправление в 574.

Вы также захотите загрузить один из ночных снимков и скопировать каталог geos / src / triangulate в свою папку сборки перед компиляцией, поскольку это отсутствует в svn_trunk.

Наконец, вы захотите внести незначительные изменения в geos / src / dirlist.mk:

На строке 45 добавьте «триангуляцию» (без кавычек) чуть ниже «упростить» и выше «использовать».

Теперь, когда вы компилируете, вы можете увидеть некоторые предупреждения, но сборка не должна прерываться напрямую …

 nmake /f makefile.vc PREFIX=../Path/To/Geos/Install/Here nmake install /f makefile.vc PREFIX=../Path/To/Geos/Install/Here 

Это заботится о ваших зависимостях от lib. Теперь вам нужно сделать одну из двух вещей: 1. Или создать файл setup.cfg в вашей папке build pyspatialite и добавить пути / bin, / lib и / include или 2.Directly отредактировать файл pyspatialite setup.py и делать то же самое.

Мне было проще отредактировать файл setup.py напрямую и добавить пути к зависимым библиотекам, чтобы они выглядели примерно так:

 (line 45) include_dirs = ['../usr/local/include', '../python27/include'] (line 46) library_dirs = ['../usr/local/lib', '../python27/libs', '../usr/local/bin', '../python27/DLLs'] (line 47) libraries = ['geos','geos_c','proj','iconv'] # You may need to add 'iconv' here (line 48) runtime_library_dirs = ['../usr/local/lib', '../python27/libs', '../usr/local/bin', '../python27/DLLs'] 

Если после внесения этих изменений pyspatialite все еще не может построить для вас, сделайте еще один набор изменений для setup.py: вокруг строки 121 добавьте следующие строки …

 ext.include_dirs.append('../python27/include') ext.include_dirs.append('../usr/local/include') ext.library_dirs.append('../python27/libs') ext.library_dirs.append('../usr/local/lib') ext.library_dirs.append('../python27/DLLs') ext.library_dirs.append('../usr/local/bin') 

Не забудьте заменить пути в соответствии с вашей конкретной настройкой. Это должно сделать это. После запуска «установки python setup.py» все должно работать.

Вы можете запустить все тесты в ./Python27/Lib/site-packages/pyspatialite/test – все они прошли для меня; однако лучше, более реалистичный тест может состоять в том, чтобы запустить пример кода из этой ссылки:

SpatiaLite и Python

Тем не менее, шаги, которые автор вносит, не охватывают детали, чтобы получить библиотеки зависимостей, работающие в среде с 64-разрядным битом, и я не нашел их особенно полезными, поскольку pyspatialite 3.0.1 теперь автоматически обнаруживает соответствующую версию пространственно-амальгамации Скачать. Пример кода на сайте создает файл пространственной базы данных и заполняет его тысячами записей. Все прошло успешно для меня; поэтому я считаю, что метод, описанный выше, для получения работы pyspatialite x64.

Удачи!

-RMWChaos

Я решил это, следуя инструкциям в последнем посте здесь . Моя система была, как и выше, – Win7 64bit с 32-битными пространственно-библиотечными библиотеками и библиотекой pysqlite для python. Я связался с sqlite3.dll в моей директории DLL (это Python, который устанавливает ArcGIS, немного отличающийся от других установок).

Это разрешило проблему с загрузкой Spatialite 4 dll через pysqlite.

  • Продолжить загрузку после IntegrityError
  • Можно ли хранить объекты класса Python в SQLite?
  • Sqlite и Python - вернуть словарь с использованием fetchone ()?
  • Создать сводную («сводную»?) Таблицу
  • Проблема с заменой параметра SQLite
  • Pandas DataFrame для SqLite
  • Сортировка по столбцу в объединенном запросе в SqlAlchemy SQLite
  • Должен ли я хранить данные DateTime как julianday в SQLite?
  • Python - лучший язык программирования в мире.