2013-12-10 22 views
10

Mi sto strappando i capelli cercando di installare Spatialite per GeoDjango!Installa Spatialite per python (GeoDjango) su OS X

Sto già utilizzando Homebrew, è generalmente facile e conveniente, quindi inizialmente ho provato a seguire lo Homebrew instructions per GeoDjango.

Ma questo non è l'installazione di alcun database, ad esempio Spatialite. Il passo successivo è provare e installare Spatialite stesso, ma non ci sono istruzioni specifiche per Homebrew fornite da Django docs.

Ho trovato this tutorial che sembra perfetto: un'installazione di Spatialite per GeoDjango basata su homebrew e virtualenv.

Ma non funziona ... sembra che il mio pysqlite sia collegato alla versione non spaziale di SQLite fornita con OS X, piuttosto che a quella Spatial-ised che ho installato da Homebrew, ottengo questo errore quando Django tentato di connettersi al db:

"la libreria pysqlite non supporta l'estensione C loading sia SQLite e pysqlite deve essere configurato per consentire il caricamento delle estensioni da utilizzare SpatiaLite."

L'autore di pysqlite non ha risposto a my pleas for help on Github e non ho trovato nulla tramite Google.

Così sono tornato al tavolo da disegno e ho deciso di seguire lo "Mac OS X-specific instructions" nella documentazione di GeoDjango installando le varie librerie geografiche dai pacchetti binari di KyngChaos.

I documenti dicono "Installa i pacchetti nell'ordine in cui sono elencati sopra" ma ho scoperto che non è possibile installare UnixImageIO senza installare PROJ prima. Il collegamento nei documenti per scaricare i binari di Spatialite (http://www.gaia-gis.it/spatialite-2.3.1/binaries.html) è danneggiato, quindi ho usato "Spatialite Tools v4.1" da KyngChaos.

di procedere alla fase successiva ottengo questo errore:

$ 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 
Non

davvero sicuro di quello che c'è di sbagliato in questo punto.

C'è qualcun altro here on SO che è andato il percorso KyngChaos e appena finisce con lo stesso "Sia SQLite e pysqlite devono essere configurati per consentire il caricamento di estensioni" errore che ho ottenuto dal percorso Homebrew comunque.

ho trovato this ticket #17756 per l'aggiunta pyspatialite supporto per Django - pyspatialite si suppone essere un modo più semplice per pip install tutto, ma purtroppo non funziona neanche (vedi commenti verso il fondo del biglietto).

Sono un po 'riluttante a iniziare a provare a creare tutto dalla sorgente a mano in quanto sembra probabile che ricomincerò gli stessi problemi, ma trascorro ore a cercare informazioni su errori di compilazione criptici, indicatori di magia e percorsi ecc lungo la strada.

Sono quasi pronto a rinunciare e utilizzare Postgres/PostGIS.

risposta

3

sono stato in grado di ottenere questo lavoro ora, usando la punta qui:
https://github.com/ghaering/pysqlite/issues/60#issuecomment-50345210

non sono sicuro se stava usando i veri sentieri che fissi, o solo i fusti Homebrew o pacchetti sottostanti avere stato aggiornato e ora installare in modo pulito. Tuttavia, funziona ora.

riporto qui di seguito i passi che ho preso:

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 

(dove birra ha riferito che avevo versioni li ho scollegato esistente e installata l'ultima, come commentato in precedenza)

poi modificati setup.cfg per commentare #define=SQLITE_OMIT_LOAD_EXTENSION e specificare i percorsi:

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

attivate il virtualenv dove voglio installato, quindi

python setup.py build 
python setup.py install 

(build_static fallisce ancora con clang: error: no such file or directory: 'sqlite3.c')

(forse avrei dovuto fare pip install . come suggerito nel numero github)

ora il spatialite geodjango.db "SELECT InitSpatialMetaData();" riesce, anche se con un errore ignorabile:

InitSpatiaMetaData() error:"table spatial_ref_sys already exists"

ieprobabilmente non è nemmeno necessario eseguire quel comando

3

Quando mi è stato istalling questo seguo questa istruzioni https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/spatialite/#pysqlite2

pysqlite2

Se hai deciso di utilizzare una versione più recente di pysqlite2 al posto del modulo del sqlite3 Python stdlib, allora avete bisogno di fare sicuro che possa caricare estensioni esterne (cioè il metodo enable_load_extension richiesto è disponibile in modo che SpatiaLite possa essere caricato).

Questo potrebbe comportare la creazione da soli. Per questo, scaricare pysqlite2 2.6 e decomprimere:

$ 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 

Successivamente, utilizzare un editor di testo (ad esempio, emacs o vi) per modificare il file setup.cfg a guardare come il seguente:

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

grazie, ma è necessario leggere tutto nella mia domanda, il mio problema è più complicato del semplice seguito dei documenti Django (che ho fatto) – Anentropic

+0

Quale parte mi è mancata, mi dispiace per la risposta incompleta – MZaragoza

+0

Ho costruito pysqlite con supporto per estensione abilitato, ma sembra essere collegato al mio sistema di installazione di SQLite al posto del SQLite abilitato per GIS che ho installato tramite Homebrew ... problema dettagliato qui https://github.com/ ghaering/pysqlite/temi/60 – Anentropic

1

Ho avuto lo stesso errore: SQLite header and source version mismatch.

Per me è stato sufficiente aggiornare libsqlite3-dev.

Dopo che il richiamo di $ spatialite geo.db "SELECT InitSpatialMetaData();" crea il database corretto.