2010-07-26 11 views
9

Estaba usando Python 2.6.5 para construir mi aplicación, que venía con sqlite3 3.5.9. Al parecer, sin embargo, como descubrí en otra pregunta mía, el soporte de claves externas no se introdujo en sqlite3 hasta la versión 3.6.19. Sin embargo, Python 2.7 viene con sqlite3 3.6.21, así que este trabajo - Decidí que quería usar claves externas en mi aplicación, así que intenté actualizar a Python 2.7.¿Cómo puedo actualizar el paquete sqlite3 en Python 2.6?

Estoy usando twisted, y no pude por mi vida hacerlo construir. Twisted confía en zope.interface y no puedo encontrar zope.interface para python 2.7 - Pensé que simplemente podría "funcionar" de todos modos, pero tendría que copiar todos los archivos sobre mí y hacer que todo funcionara por mí mismo, en lugar de solo usar los paquetes de autoinstalación.

Así que pensé que sería mejor volver a compilar Python 2.6 y vincularlo con una nueva versión de sqlite3. Pero no sé cómo--

¿Cómo haría esto?

He Visual Studio 2008 instalado como un compilador, he leído que es el único que es realmente compatible con Windows, y yo estoy corriendo un sistema operativo de 64 bits

+0

¿Podrías arrojar una sola dependencia de borde sangrante más allí? ;) – msw

+0

@msw Entiendo que actualizar a _very latest_ python y esperar que las bibliotecas existentes lo admitan es un poco ridículo. Pero no creo que llegar a una compatibilidad integrada para un rdbms que admita características básicas sea tan exagerado, especialmente cuando eres relativamente nuevo en sql y quieres la seguridad de que tus tablas te respaldarán si la basura intenta hacer su camino hacia su base de datos. –

+0

No pensé que fuera exagerado y no fuera serio, por lo que el emoticón;) Pensé que te estabas comprando en un limbo de dependencia cruzada que, de hecho, resultó ser. Paz. – msw

Respuesta

3

sqlite3 no es un módulo incorporado; es un módulo de extensión (el binario es C: \ Python26 \ DLLs_sqlite3.pyd (en mi máquina)). Un pyd es un archivo DLL con una extensión de nombre de archivo diferente y solo 1 punto de entrada. También hay un sqlite3.dll, que contiene el código SQLite. python.exe no está vinculado a ninguno de los dos y, por lo tanto, la reconstrucción de python.exe no tiene sentido.

La siguiente idea es ir al sitio de descarga de pysqlite2 y obtener el último instalador de Windows para Python 2.6. Lamentablemente, no hay documentos sobre qué versión de SQLite contiene; hay que instalarlo y luego perder el tiempo:

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

Por lo tanto, sólo contiene la versión 3.6.2 SQLite, que no tiene el apoyo real de clave externa que desea.

Le sugiero que compruebe el mailing list para ver si su pregunta es respondida allí, y si no pregunta sobre la posibilidad de un instalador de Python 2.6 que contenga un SQLite posterior (por ejemplo, el incluido con Python 2.7).

+0

Veo, gracias, no estoy muy familiarizado con las partes internas de Python. –

1

decidí que le daría a este un disparo cuando me di cuenta de que todas las bibliotecas que he instalado en Python 2.6 residían en mi carpeta de paquetes de sitio. Yo solo ... copié paquetes de sitio en mi instalación 2.7, y funciona hasta ahora. Esta es, de lejos, la ruta más fácil para mí si esto funciona; lo investigaré más a fondo, pero al menos puedo seguir desarrollándome ahora.

No aceptaré esta respuesta, porque ni siquiera responde mi pregunta, pero soluciona mi problema, por lo que puedo decir hasta ahora.

+0

+1 esta es una respuesta aceptable dado el laberinto de pequeñas dependencias retorcidas, todas iguales, en las que te has encontrado. He retroalimentado select, minor lib/python3.x/foo.py en python2.6 cuando un proyecto en particular lo necesitaba (y lo probaba al máximo, y no pensaba en infligirlo en nada más que en mi instalación local) pero funciona y, en comparación con las alternativas, es una solución de ingeniería satisfactoria. . – msw

+0

Esto supone que ninguna de las bibliotecas que haya instalado en los paquetes de sitio contiene extensiones C o Cython; al menos en Windows, esos archivos .PYD están vinculados a una versión particular de Python. –

+0

@John uh oh - Noté que todos mis archivos .pyc fallaban con "mal número mágico" que asumí que significaba una versión incorrecta de python. Simplemente los borré. De todos modos, la instalación de twisted que tenía se instaló desde el instalador de Windows desde el sitio oficial y parece estar funcionando (espero) (el paquete twisted tiene extensiones C). En cualquier caso, esto es para mi versión local. Intentar configurar el intérprete y todas sus dependencias en un servidor en vivo es ... ¡Un problema para otro día! –

6

descargue la última versión de sqlite3.dll del sitio web sqlite y reemplace el sqlite3.dll en el directorio de python.

+0

+1000 (si pudiera). Esto acaba de actualizar mi instalación de python 2.6 a sqlite 3.7.17 (x86) http://www.sqlite.org/download.html – Barton

+0

Funciona también con python 2.7 –

Cuestiones relacionadas