2010-07-26 6 views
9

Ich benutzte Python 2.6.5, um meine Anwendung zu erstellen, die mit sqlite3 3.5.9 kam. Offenbar wurde, wie ich in einer anderen Frage herausgefunden habe, die Fremdschlüsselunterstützung in sqlite3 erst ab Version 3.6.19 eingeführt. Wie auch immer, Python 2.7 kommt mit sqlite3 3.6.21, also diese Arbeit - ich entschied, dass ich Fremdschlüssel in meiner Anwendung verwenden wollte, also habe ich versucht, auf Python 2.7 zu aktualisieren.Wie kann ich das sqlite3-Paket in Python 2.6 aktualisieren?

Ich benutze verdreht, und ich konnte nicht für das Leben von mir es zu bauen. Twisted setzt auf zope.interface und ich kann zope.interface für python 2.7 nicht finden - ich dachte, es könnte sowieso "funktionieren", aber ich müsste einfach alle Dateien über mich selbst kopieren und alles selbst funktionieren lassen, anstatt nur die selbstinstallierenden Pakete zu verwenden.

Also dachte ich, es wäre vielleicht klüger, Python 2.6 einfach neu zu erstellen und es mit einer neuen Version von sqlite3 zu verknüpfen. Aber ich weiß nicht wie--

Wie würde ich das tun?

ich Visual Studio 2008 als Compiler installiert haben, habe ich gelesen, dass die einzige ist, die wirklich für Windows unterstützt wird, und ich bin eine 64-Bit-Betriebssystem

+0

könnten Sie nur noch eine blutende Randabhängigkeit in dort werfen? ;) – msw

+0

@msw Ich verstehe, die Aktualisierung auf den _very_python _very_ und erwarten, dass vorhandene Bibliotheken es unterstützen, ist ein bisschen lächerlich. Aber ich glaube nicht, dass das Erreichen der eingebauten Unterstützung für ein RDBMS, das grundlegende Funktionen unterstützt, so weit hergeholt ist, besonders wenn Sie relativ neu bei SQL sind und die Sicherheit wollen, dass Ihre Tabellen Sie unterstützen, wenn Müll versucht, es zu machen seinen Weg in Ihre Datenbank. –

+0

Ich hielt es nicht für weit hergeholt und war nicht ernst, woher der Smiley;) Ich dachte, dass Sie sich in Abhängigkeit von der Abhängigkeit einkauften, die Sie tatsächlich waren. Frieden. – msw

Antwort

3

sqlite3 ist kein integriertes Modul; Es ist ein Erweiterungsmodul (das Binary ist C: \ Python26 \ DLLs_sqlite3.pyd (auf meinem Rechner)). Ein Pyd ist eine DLL mit einer anderen Dateinamenerweiterung und nur einem Einstiegspunkt. Es gibt auch eine sqlite3.dll, die den SQLite-Code enthält. python.exe ist nicht mit diesen beiden verbunden, und daher hat das erneute Erstellen von python.exe keinen Sinn.

Die nächste Idee ist, auf die Pysqlite2-Download-Site zu gehen und das neueste Windows-Installationsprogramm für Python 2.6 zu erhalten. Leider gibt es keine Dokumentation darüber, welche Version von SQLite es enthält. man braucht um es zu installieren und dann verarschen:

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

Also, es enthält nur SQLite-Version 3.6.2, die, die Sie wollen nicht die wirkliche Fremdschlüssel Unterstützung.

Ich schlage vor, dass Sie die mailing list überprüfen, um zu sehen, ob Ihre Frage dort beantwortet wird, und wenn nicht nach der Möglichkeit eines Python 2.6-Installationsprogramms fragen, das eine spätere SQLite enthält (z. B. die in Python 2.7 enthaltene).

+0

Ich sehe, danke, ich bin nicht ganz vertraut mit Python Interna. –

1

entschied ich würde nur diese geben eine Aufnahme, als ich feststellte, dass jede Bibliothek, die ich jemals in Python 2.6 installiert hatte, in meinem Site-Packages-Ordner lag. Ich habe nur Site-Pakete in meine 2.7-Installation kopiert, und es funktioniert so weit. Dies ist bei weitem der einfachste Weg für mich, wenn das funktioniert - ich werde weiter darauf eingehen, aber zumindest kann ich mich jetzt weiterentwickeln.

Ich werde diese Antwort nicht akzeptieren, weil sie nicht einmal meine Frage beantwortet, aber sie löst mein Problem, soweit ich das beurteilen kann.

+0

+1 Dies ist eine akzeptable Antwort angesichts der Labyrinth von twisty kleine Abhängigkeiten, alle gleich, die Sie selbst gefunden haben. Ich habe Select-Minor lib/python3.x/foo.py zurück in Python2.6 wenn ein bestimmtes Projekt es brauchte (und es gründlich getestet hat und nicht daran denken würde, es irgendwas außer meiner lokalen Installation zuzufügen), aber es funktioniert und im Vergleich zu den Alternativen ist ein Engineering-Kompromiss, der zufrieden stellend war . – msw

+0

Dies setzt voraus, dass keine der Bibliotheken, die Sie jemals in Site-Paketen installiert haben, C- oder Cython-Erweiterungen enthalten. Unter Windows sind diese .PYD-Dateien an eine bestimmte Version von Python gebunden. –

+0

@John uh oh - Ich habe bemerkt, dass alle meine .pyc-Dateien mit "bad magic number" fehlschlugen, was ich für eine falsche Version von Python hielt. Ich habe sie einfach gelöscht. Wie auch immer, die Installation von twisted, die ich hatte, wurde vom Windows-Installer von der offiziellen Seite installiert und es scheint zu funktionieren (ich hoffe) (das verdrehte Paket hat C-Erweiterungen). In jedem Fall ist dies für meine lokale Version. Der Versuch, den Interpreter und seine Abhängigkeiten auf einem Live-Server einzurichten, ist ... Ein Problem für einen anderen Tag! –

6

laden Sie die neueste Version von sqlite3.dll von sqlite Website herunter und ersetzen Sie die sqlite3.dll im Python-Verzeichnis.

+0

+1000 (wenn ich könnte). Dies aktualisiert gerade meine Python 2.6 Installation auf sqlite 3.7.17 (x86) http://www.sqlite.org/download.html – Barton

+0

Funktioniert auch mit Python 2.7 –

Verwandte Themen