2013-12-10 48 views
10

Tôi đang rách tóc ra cố gắng cài đặt Spatialite cho GeoDjango!Cài đặt Spatialite cho python (GeoDjango) trên OS X

Tôi đã sử dụng Homebrew, nó thường dễ dàng và thuận tiện vì vậy ban đầu tôi đã cố gắng theo dõi Homebrew instructions cho GeoDjango.

Nhưng điều này dừng việc cài đặt bất kỳ cơ sở dữ liệu nào, ví dụ: Spatialite. Bước tiếp theo là thử và cài đặt Spatialite, nhưng không có hướng dẫn cụ thể về Homebrew được cung cấp bởi tài liệu Django.

Tôi tìm thấy this tutorial trông hoàn hảo - cài đặt Homebrew và virtualenv thân thiện với Spatialite cho GeoDjango.

Nhưng nó không hoạt động ... có vẻ như pysqlite của tôi được liên kết với phiên bản SQLite không được kích hoạt không gian đi kèm với OS X, thay vì không gian được cài đặt từ Homebrew, tôi nhận được lỗi này khi Django cố gắng kết nối với db:

"Thư viện pysqlite không hỗ trợ tải mở rộng C. Cả SQLite và pysqlite phải được định cấu hình để cho phép tải tiện ích mở rộng sử dụng SpatiaLite".

Tác giả của pysqlite chưa trả lời my pleas for help on Github và tôi chưa tìm thấy bất kỳ điều gì thông qua Google.

Vì vậy, tôi đã quay lại bảng vẽ và quyết định theo dõi "Mac OS X-specific instructions" trong tài liệu GeoDjango ... bằng cách cài đặt các lib địa lý khác nhau từ các gói nhị phân KyngChaos.

Tài liệu nói "Cài đặt các gói theo thứ tự chúng được liệt kê ở trên" nhưng tôi thấy tôi không thể cài đặt UnixImageIO mà không cài đặt PROJ trước tiên. Liên kết trong tài liệu để tải xuống các tệp nhị phân Spatialite (http://www.gaia-gis.it/spatialite-2.3.1/binaries.html) bị hỏng nên tôi đã sử dụng "Công cụ Spatialite v4.1" từ KyngChaos thay thế.

Tiến hành các bước tiếp theo tôi nhận được lỗi này:

$ spatialite geodjango.db "SELECT InitSpatialMetaData();" 
SQLite header and source version mismatch 
2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a 
2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef 

Không thực sự chắc chắn có chuyện gì vậy vào thời điểm này.

Có ai đó here on SO người đã đi con đường KyngChaos và chỉ kết thúc với cùng "Cả hai SQLite và pysqlite phải được cấu hình để cho phép tải các phần mở rộng" lỗi tôi nhận được từ con đường Homebrew anyway.

tôi thấy this ticket #17756 để thêm pyspatialite hỗ trợ cho Django - pyspatialite được coi là một cách dễ dàng hơn để pip install tất cả mọi thứ nhưng tiếc là nó không hoạt động hoặc (xem bình luận về phía dưới cùng của vé).

Tôi hơi miễn cưỡng khi bắt đầu cố gắng xây dựng mọi thứ từ nguồn bằng tay vì có vẻ như tôi sẽ gặp phải vấn đề tương tự một lần nữa, nhưng dành hàng giờ Googling để biết thông tin về lỗi trình biên dịch, cờ phép thuật và đường dẫn vv trên đường đi.

Tôi sắp sẵn sàng từ bỏ và chỉ sử dụng Postgres/PostGIS.

Trả lời

3

tôi đã có thể có được điều này làm việc bây giờ, bằng cách sử dụng mũi ở đây:
https://github.com/ghaering/pysqlite/issues/60#issuecomment-50345210

Tôi không chắc chắn nếu nó được sử dụng các đường dẫn thực sự mà cố định nó, hay chỉ là những chiếc thùng chứa Homebrew hoặc gói cơ bản có được cập nhật và bây giờ cài đặt sạch sẽ. Tuy nhiên, nó hoạt động ngay bây giờ.

Tôi sinh sản dưới bước tôi mất:

brew update 
brew install sqlite # 3.8.5 
brew install libspatialite # 4.2.0 
brew install spatialite-tools # 4.1.1 

git clone https://github.com/ghaering/pysqlite.git 
cd pysqlite 

(nơi brew báo cáo tôi đã hiện phiên bản tôi hủy liên kết chúng và cài đặt mới nhất như nhận xét ở trên)

sau đó sửa setup.cfg để nhận xét ra #define=SQLITE_OMIT_LOAD_EXTENSION và chỉ định đường dẫn:

include_dirs=/usr/local/opt/sqlite/include 
library_dirs=/usr/local/opt/sqlite/lib 

kích hoạt virtualenv nơi tôi muốn cài đặt, sau đó

python setup.py build 
python setup.py install 

(build_static vẫn không thành công với clang: error: no such file or directory: 'sqlite3.c')

(có lẽ tôi nên làm pip install . như đề xuất trong vấn đề github)

nay là spatialite geodjango.db "SELECT InitSpatialMetaData();" thành công, mặc dù với một lỗi có thể bỏ qua:

InitSpatiaMetaData() error:"table spatial_ref_sys already exists"

iecó lẽ thậm chí không cần thiết để chạy lệnh đó

3

Khi tôi istalling này tôi làm theo hướng dẫn này https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/spatialite/#pysqlite2

pySqlite2

Nếu bạn đã quyết định sử dụng một phiên bản mới hơn của pySqlite2 thay vì module sqlite3 Python stdlib, sau đó bạn cần phải thực hiện chắc chắn nó có thể tải các phần mở rộng bên ngoài (tức là phương thức enable_load_extension được yêu cầu có sẵn để SpatiaLite có thể được nạp).

Điều này có thể liên quan đến việc tự xây dựng nó. Đối với điều này, tải pySqlite2 2.6, và tar:

$ wget https://pypi.python.org/packages/source/p/pysqlite/pysqlite-2.6.3.tar.gz 
$ tar xzf pysqlite-2.6.3.tar.gz 
$ cd pysqlite-2.6.3 

Tiếp theo, sử dụng một trình soạn thảo văn bản (ví dụ, emacs hay vi) để chỉnh sửa các tập tin setup.cfg để trông giống như sau:

[build_ext] 
#define= 
include_dirs=/usr/local/include 
library_dirs=/usr/local/lib 
libraries=sqlite3 
#define=SQLITE_OMIT_LOAD_EXTENSION 
+0

cảm ơn nhưng bạn cần đọc mọi thứ trong câu hỏi của tôi, vấn đề của tôi phức tạp hơn là chỉ theo tài liệu Django (mà tôi đã thực hiện) – Anentropic

+0

Tôi đã bỏ lỡ phần nào, xin lỗi vì câu trả lời chưa hoàn chỉnh – MZaragoza

+0

Tôi đã xây dựng pysqlite với hỗ trợ mở rộng, nhưng có vẻ như nó được liên kết với hệ thống SQLite của tôi thay vì SQLite đã được kích hoạt GIS mà tôi đã cài đặt qua Homebrew ... vấn đề chi tiết tại đây https://github.com/ ghaering/pysqlite/issues/60 – Anentropic

1

Tôi đã gặp lỗi tương tự: SQLite header and source version mismatch.

Đối với tôi, điều đó là đủ để cập nhật libsqlite3-dev.

Sau đó gọi $ spatialite geo.db "SELECT InitSpatialMetaData();" tạo cơ sở dữ liệu thích hợp.

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