2010-07-26 15 views
9

Stavo usando Python 2.6.5 per creare la mia applicazione, fornita con sqlite3 3.5.9. Apparentemente però, come ho scoperto in un'altra mia domanda, il supporto delle chiavi esterne non è stato introdotto in sqlite3 fino alla versione 3.6.19. Comunque, Python 2.7 è dotato di sqlite3 3.6.21, quindi questo lavoro - ho deciso che volevo usare chiavi esterne nella mia applicazione, così ho provato ad aggiornare a python 2.7.Come posso aggiornare il pacchetto sqlite3 in Python 2.6?

Sto usando twistato, e non potrei per la vita di me farlo costruire. Twisted fa affidamento su zope.interface e non riesco a trovare zope.interface per python 2.7 - Pensavo che avrebbe potuto funzionare "comunque", ma dovevo semplicemente copiare tutti i file su me stesso e ottenere tutto da solo, piuttosto che usare solo i pacchetti autoinstallanti.

Quindi ho pensato che sarebbe stato più semplice ricostruire python 2.6 e collegarlo a una nuova versione di sqlite3. Ma non so come--

Come farei questo?

ho Visual Studio 2008 installato come un compilatore, ho letto che questo è l'unico che è realmente supportato per Windows, e io sono in esecuzione un sistema operativo a 64 bit

+0

potresti buttare solo una dipendenza in più dal vivo? ;) – msw

+0

@msw Capisco che l'aggiornamento a _very latest_ python e l'attesa di librerie esistenti per supportarlo è un po 'ridicolo. Ma non penso che raggiungere il supporto integrato per un rdbms che supporti le funzionalità di base sia così esagerato, specialmente quando sei relativamente nuovo a sql e vuoi la sicurezza che le tue tabelle ti sosterranno se la spazzatura cerca di fare nel suo database. –

+0

Non pensavo che fosse inverosimile e non fosse serio, da cui lo smiley;) Pensavo che ti stavi comprando in un limbo di interdipendenza che in effetti ti sei rivelato essere. Pace. – msw

risposta

3

sqlite3 non è un modulo incorporato; è un modulo di estensione (il file binario è C: \ Python26 \ DLLs_sqlite3.pyd (sulla mia macchina)). Un pyd è una DLL con un'estensione di nome file diversa e solo 1 punto di ingresso. C'è anche un sqlite3.dll, che contiene il codice SQLite. python.exe non è collegato a nessuno di questi e quindi ricostruire python.exe non ha senso.

L'idea successiva è quella di accedere al sito di download pysqlite2 e ottenere l'ultimo programma di installazione di Windows per Python 2.6. Sfortunatamente non ci sono documenti riguardo la versione di SQLite che contiene; uno ha bisogno di installarlo e poi letame su:

>>> import sqlite3 as standard 
>>> from pysqlite2 import dbapi2 as latest 
>>> for m in (standard, latest): 
... print m.sqlite_version 
... 
3.5.9 
3.6.2 
>>> 

Quindi, contiene solo SQLite versione 3.6.2, che non ha il vero supporto chiave esterna che si desidera.

Suggerisco di controllare lo mailing list per vedere se la vostra domanda trova risposta lì, e se non chiederlo sulla possibilità di un programma di installazione di Python 2.6 contenente un SQLite successivo (ad esempio quello incluso in Python 2.7).

+0

Vedo, grazie, non ho molta familiarità con gli interni di Python. –

1

ho deciso che avevo appena dare a questo un colpo quando ho capito che ogni libreria che abbia mai installato in Python 2.6 risiedeva nella mia cartella dei pacchetti del sito. Ho appena ... copiato i pacchetti del sito nella mia installazione 2.7 e funziona così lontano. Questo è di gran lunga la via più facile per me se questo funziona - cercherò di approfondire ulteriormente, ma almeno posso continuare a sviluppare ora.

Non accetterò questa risposta, perché non risponde nemmeno alla mia domanda, ma risolve il mio problema, per quanto posso dire finora.

+0

+1 questa è una risposta accettabile dato il labirinto di piccole e tortuose dipendenze, tutte uguali, in cui ti sei trovato. Ho back-ported select, minor lib/python3.x/foo.py in python2.6 quando un particolare progetto ne aveva bisogno (e ne ha provato a morte, e non pensava di infliggerlo su qualcosa che non fosse la mia installazione locale) ma funziona e rispetto alle alternative, è un compromesso ingegneristico che era soddisfacente . – msw

+0

Si presume che nessuna delle librerie che hai mai installato nei pacchetti del sito contenga estensioni C o Cython - almeno su Windows, quei file .PYD sono legati a una particolare versione di Python. –

+0

@John uh oh - Ho notato che tutti i miei file .pyc non hanno funzionato con "numero magico errato" che presumibilmente intendevo per versione sbagliata di python. Li ho appena cancellati. Ad ogni modo, l'installazione di twisted che avevo era stata installata dal programma di installazione di Windows dal sito ufficiale e sembra funzionare (spero) (il pacchetto twisted ha estensioni C). In ogni caso, questo è per la mia versione locale. Cercando di ottenere l'interprete e tutte le sue dipendenze impostate su un server live è ... Un problema per un altro giorno! –

6

scaricare l'ultima versione di sqlite3.dll dal sito Web sqlite e sostituire sqlite3.dll nella directory python.

+0

+1000 (se potessi). Questo ha appena aggiornato la mia installazione di python 2.6 a sqlite 3.7.17 (x86) http://www.sqlite.org/download.html – Barton

+0

Funziona anche con python 2.7 –

Problemi correlati