2011-12-21 39 views
8

Tôi đang cố gắng sử dụng phiên bản beta Spatialite phiên bản 3.0 vì tôi đang sử dụng Windows 7 trên máy 64 bit.Sqlite load_extension thất bại đối với spatialite trong Python

Tôi liên tục nhận được lỗi sqlite3.OperationalError: The specified module could not be found. đáng sợ khi tôi cố gắng tải libspatialite-4.dll.

Tôi đã thử những điều sau đây:

  • đặt libspatialite-4.dll và tất cả các dlls khác trong cùng một thư mục
  • sử dụng đường dẫn đầy đủ tới các file dll
  • thêm vị trí dll vào 'PATH' biến môi trường
  • nối vị trí dll vào thuộc tính sys.path như một phần của mã Python
  • sao chép tất cả các dll trong thư mục c:\windows\system32 (com plete với khởi động lại máy)
  • sao chép tất cả các file dll trong thư mục c:\windows\sysWoW64 (hoàn chỉnh với khởi động lại máy tính này được coi là cho dlls 32 bit nhưng tôi đã cố gắng nó anyway)

mã của tôi là như sau:

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

LƯU Ý - Tôi đã thử đường dẫn đầy đủ không có may mắn. Tôi nhớ có vấn đề tương tự với Windows XP 32 bit. Tôi đã làm việc nhưng không thể nhớ những gì tôi đã làm :(

CẬP NHẬT

Tôi đã thử nghiệm các thiết lập trên 32-bit Windows 7 và đặt tất cả các file dll trong thư mục System32 hoạt động. Vì vậy, Điều này cho thấy rằng có một số vấn đề với thiết lập 64-bit. Có thể tôi cần một phiên bản MSVC khác (tôi không nghĩ trang web Spatialite nói cần thiết để tôi có thể đoán - tôi đã cài đặt MSVC2010) ?

+0

có thể trùng lặp với [SQLite + SpatiaLite problems] (http://stackoverflow.com/questions/1556436/sqlite-spatialite-problems) –

+0

Chỉ cần kiểm tra chuỗi đó, Cedric - Tôi đã bỏ lỡ nó trong tìm kiếm của mình. Vấn đề là tương tự mặc dù tôi đang sử dụng Python không C# và tôi cũng đang sử dụng phiên bản beta 64-bit là mới kể từ đó. Tôi chắc chắn có tất cả các dll được liệt kê trong chủ đề đó để giải pháp không giải quyết vấn đề của tôi. – MappaGnosis

Trả lời

2

Tôi đã gặp vấn đề tương tự và nó làm tôi bối rối trong nhiều ngày. Tôi đang chạy Python 2.6 (32 bit) trên Windows 7 (x64), vì vậy nó có thể không được thiết lập giống như bạn ha đã.

Đây là những gì bạn có thể thử (lấy từ Google Groups post này):

  1. Đặt dlls spatialite (libgeos_c-1.dll, libgeos-3-0-0.dll, libproj-0.dll, và libspatialite-2.dll) vào một thư mục trên ổ C: /.
  2. Thêm thư mục này vào PATH của bạn.

Sự cố có vẻ là Windows không thể tải các tệp từ C: \ Windows \ system32 do cài đặt quyền của người dùng.

0

Tôi vừa mới trải qua một cơn ác mộng về một phiên bản x64 của pyspatialite 3.0.1 và tất cả thư viện phụ thuộc của nó. Nó có thể được thực hiện, nhưng phải mất một số "tinh chỉnh" để làm cho nó đúng.

Trước tiên, lưu ý giải pháp khắc phục có thể cần thiết để biên dịch không gian.c hợp nhất ở đây:

Pyspatialite 3.0.1 Issue #7 Comment #3

Thứ hai, tôi đề nghị bạn biên dịch với MSVC 2008/SDK 7.0 x64, đó là những gì Python 2.7 x64 được biên soạn với. Tôi đã gặp rất nhiều rắc rối khi cố gắng biên dịch ngay khi tôi biên dịch các lib phụ thuộc với mingw-w64.

biểu tượngv (v. 1.9.2) và proj4 (v. 4.8.0) cả hai dường như biên dịch và cài đặt tốt; tuy nhiên, bạn có thể gặp phải một số sự cố khi sử dụng svn_trunk GEOS mới nhất (v. 3.3.5). Lưu ý các liên kết sau đây để biết cách giải quyết/sửa ...

OSGEO GEOS TRAC Ticket #574

OSGEO GEOS TRAC Ticket #577

Nếu bạn tải hai makefiles từ 577, chúng bao gồm việc sửa chữa trong 574.

Bạn cũng sẽ muốn tải xuống một trong những ảnh chụp nhanh hàng đêm và sao chép thư mục geos/src/triangulate qua thư mục build của bạn trước khi biên dịch, vì nó thiếu trong svn_trunk.

Cuối cùng, bạn sẽ muốn thực hiện một thay đổi nhỏ để GEOS/src/dirlist.mk:

Tại dòng 45, thêm 'triangulate \' (không có dấu ngoặc kép) ngay dưới 'đơn giản hóa \' trở lên ' util '.

Bây giờ khi bạn biên dịch, bạn có thể thấy một số cảnh báo, nhưng việc xây dựng không nên thất bại hoàn toàn ...

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

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

đó sẽ chăm sóc phụ thuộc lib của bạn. Bây giờ bạn cần thực hiện một trong hai điều sau: 1. Tạo tệp setup.cfg trong thư mục xây dựng pyspatialite của bạn và thêm đường dẫn/bin,/lib và/include hoặc 2. Trực tiếp chỉnh sửa pyspatialite setup.py và làm như vậy.

tôi tìm thấy nó dễ dàng nhất để chỉnh sửa các tập tin setup.py trực tiếp, và thêm các đường dẫn đến sự phụ thuộc libs để trông giống như:

(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'] 

Nếu sau khi thực hiện những thay đổi này pyspatialite vẫn thất bại trong việc xây dựng cho bạn, sau đó làm thêm một bộ sửa đổi setup.py: khoảng dòng 121, thêm những dòng sau đây ...

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') 

hãy nhớ để thay thế các đường dẫn để phù hợp với thiết lập cụ thể của bạn. Nên làm vậy. Sau khi bạn chạy 'python setup.py install', mọi thứ sẽ hoạt động.

Bạn có thể chạy tất cả các thử nghiệm trong ../Python27/Lib/site-packages/pyspatialite/test - tất cả đều được chuyển cho tôi; Tuy nhiên, một tốt hơn, kiểm tra thực tế hơn có thể là để chạy mã ví dụ từ liên kết này:

SpatiaLite and Python

Các bước tác giả đi vào không bao gồm các chi tiết để có được những libs phụ thuộc làm việc trong một chút x64 môi trường, tuy nhiên, và tôi đã không tìm thấy chúng đặc biệt hữu ích như pyspatialite 3.0.1 bây giờ tự động phát hiện các phiên bản thích hợp của sự pha trộn không gian để tải về. Mã mẫu trên trang web tạo tệp cơ sở dữ liệu không gian và điền nó với hàng nghìn mục nhập. Mọi thứ chạy thành công cho tôi; vì vậy tôi tin rằng phương pháp được nêu ở trên để có được công trình xây dựng pyspatialite x64.

Chúc may mắn!

-RMWChaos

0

tôi giải quyết điều này bằng cách hướng dẫn sau đây trong bài cuối cùng here. Hệ thống của tôi, như trên một số ở trên - Win7 64bit với 32-bit spatialite thư viện và thư viện pysqlite cho python. Tôi liên kết với sqlite3.dll trong thư mục DLLs của tôi (đây là Python mà ArcGIS cài đặt, do đó hơi khác với các cài đặt khác).

Điều này giải quyết được vấn đề khi tải Spatialite 4 dll qua pysqlite.

1

Phiên bản sqlite3.dll đi kèm với Python dường như không muốn chơi tốt với Spatialite. Điều duy nhất tôi có thể bắt đầu làm việc (viết tắt của biên dịch tất cả mọi thứ từ nguồn) là:

  1. Tải SQLite (hoặc cyqlite - một biên dịch lại của SQLite cho Windows với một số tính năng tiện dụng được kích hoạt, chẳng hạn như R-Tree, do đó bạn có thể làm chỉ số spaital) tức là sqlite-dll-win32-x86-[version].zip
  2. Tải mod_spatialite (Windows nhị phân là trong hộp màu hồng ở dưới cùng của trang) tức là mod_spatialite-[version]-win-x86.7z
  3. Unzip đầu tiênSQLite/cyqlitesau đómod_spatialite vào cùng thư mục (ghi đè lên nếu có bất kỳ mâu thuẫn)
  4. Thêm thư mục này để hệ thống đường dẫn của bạn
  5. Đổi tên sqlite3.dll đó là trong thư mục Python DLL của bạn, một cái gì đó giống như sqlite3_old.dll, do đó Python sẽ sử dụng mã mới trên đường dẫn của bạn

Xem this blog post để biết thêm thông tin.

Các vấn đề liên quan