2014-10-13 20 views
5

Vorrei utilizzare SQLite versione 3.8 con Python, ma il modulo SQLite3 utilizza una versione obsoleta. Ho installato SQLite versione 3.8.4.3 sul mio Mac, ma sqlite3.sqlite_version restituisce ancora 3.7.13.Come aggiornare la versione di SQLite utilizzata dal modulo SQLite3 di Python su Mac?

Ho fatto un bel po 'di ricerche su SO e altrove, ma non riesco a trovare una risposta definitiva.

Grazie!

+0

Come è stato installato SQLite 3.8.4.3? Installer binario da sqlite.org, Homebrew, controlla e crea il sorgente, ...? – abarnert

+0

Credo di aver provato tutti quelli. Ci si assicurerà che la nuova versione sia usata dal pacchetto python? –

+0

No, nessuno di loro si assicurerà senza fare qualcosa di aggiuntivo. Ma nessuno può dirti come procedere oltre senza sapere che cosa hai fatto. (E dove sono finite le librerie, e qual è il tuo 'PATH', e così via.) – abarnert

risposta

1

Dai vostri commenti, il problema è che il pre-installato sqlite 3.7 viene superiore sul percorso che di terze parti 3.8. Ciò significa che quando si crea pysqlite2, per impostazione predefinita, troverà e userà quello 3.7, quindi non ti farà nulla di buono. E probabilmente non vuoi cambiare tutto il tuo percorso solo per far fronte a questo.

Ma va bene, finché il 3.8 viene trovato prima al momento della compilazione, non importa ciò che viene prima in fase di esecuzione; il percorso per 3.8 verrà inserito nel modulo. Ci sono un certo numero di modi per farlo, ma il più semplice è qualcosa di simile:

$ brew install sqlite3 
$ sudo -s 
# LDFLAGS=-L/usr/local/opt/sqlite/lib CPPFLAGS=-I/usr/local/opt/sqlite/include pip2.7 install pysqlite 
# ^D 
$ python 
>>> import sqlite3 
>>> sqlite3.sqlite_version 
'3.7.13' 
>>> import pysqlite2.dbapi2 
>>> pysqlite2.dbapi2.sqlite_version 
'3.8.6' 

I LDFLAGS e CPPFLAGS variabili provenivano da l'uscita del passo brew install sqlite3. Se hai installato sqlite3 in un altro modo, dovrai ottenere i valori appropriati, possibilmente /usr/local/lib e /usr/local/include, ma in caso contrario, cerca libsqlite3.dylib e sqlite3.h.

Si noti che se si seguono esattamente questi passaggi, si otterrà una versione non grassa del libsqlite3, il che significa che pysqlite2 non funziona in modalità a 32 bit. Dubito che sia un problema per te, ma se lo è, puoi semplicemente installarlo --universal, o usare un programma di installazione diverso invece di Homebrew.

0

Penso che il modo più semplice sia aggiornare il tuo Python all'ultima versione perché sqlite3 viene fornito con Python.

In caso contrario è necessario aggiornare anche il pacchetto pysqlite. Sotto Linux c'è un pacchetto precompilato python-sqlite.

È possibile farlo utilizzando easy_install. Per costruire questo pacchetto hai bisogno di alcuni pacchetti. Nessecerily build pysqlite con la nuova versione installata di sqlite3, nel tuo caso 3.8.4.3.

sudo easy_install pysqlite 

o

sudo pip install --upgrade pysqlite 
+0

Ci ho provato, ma senza fortuna. Devo fare qualcosa per assicurarmi che la nuova installazione del pacchetto pysqlite sia costruita usando la nuova versione sqlite3? –

+0

Devi essere sicuro che il tuo semplice comando sqlite ripeta quello nuovo. Nell'output dell'edificio potrebbe esserci un suggerimento su quale versione è stata utilizzata. Ho trovato una [domanda] simile (https://stackoverflow.com/questions/10984403/how-to-update-python-sqlite-on-mac-osx). – wenzul

+1

'easy_install' (a) è obsoleto, e (b) richiede' setuptools' tanto quanto 'pip' fa (in effetti fa parte di' setuptools'), quindi non dovresti proprio raccomandarlo. – abarnert

Problemi correlati