python - postgres - psycopg
¿Cómo logras que PyPy, Django y PostgreSQL trabajen juntos? (2)
psycopg2cffi (Actualizado en 2015)
psycopg2cffi es otro reemplazo compatible con psycopg2 y debería proporcionar el mejor rendimiento de PostgreSQL con PyPy. Agregue esto a su settings.py
para seguir siendo compatible con ambos:
try:
import psycopg2
except ImportError:
# Fall back to psycopg2cffi
from psycopg2cffi import compat
compat.register()
psycopg2-ctypes (2012)
También sé que algunas personas están usando psycopg2-ctypes.
Esta es la manera más fácil; para seguir siendo compatible con ambos, solo agregue este código en su Django settings.py
:
try:
import psycopg2
except ImportError:
# Fall back to psycopg2-ctypes
from psycopg2ct import compat
compat.register()
Probé esto hace algunos lanzamientos; tristemente, en mi experiencia, psycopg2-ctypes niega las pequeñas ganancias de rendimiento que ofrece PyPy. Pero YMMV, depende de cuán amigable para JIT sea tu código en general y qué fracción de tiempo pasas corriendo el código Python. Y tal vez PyPy ha mejorado desde entonces.
y no creo que psycopg2-ctypes esté listo para Windows todavía
No lo he intentado, pero ctypes es independiente de la plataforma. AFAICT solo tiene que asegurarse de que la biblioteca libpq.dll
es cargable (ubicada en un directorio en su variable de entorno PATH o directorio local) y debería funcionar en Windows como en Linux.
pypy-postgresql
Veo que Alex Gaynor ha hecho una bifurcación de PyPy llamada pypy-postgresql.
No creo que esta sea una buena opción a largo plazo. La rama no se ha actualizado durante más de un año y mis intentos de compilación han fallado. Y parece incorrecto codificar un controlador PostgreSQL en el intérprete de todos modos.
También creo que no hay binarios de pypy-postgresql, así que si quieres usarlos, necesitarás construir toda la rama PyPy tú mismo. No es para los débiles de corazón: lleva decenas de minutos y una máquina con al menos 4 GB de memoria. (Instrucciones oficiales: http://pypy.org/download.html#building-from-source )
Para construir, primero necesitas la fuente. Si tiene instalado Mercurial, simplemente puede hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
. De lo contrario, puede descargar el archivo comprimido automágico "tip": https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip
Abra una línea de comando, vaya al directorio descomprimido, y luego dentro de pypy/translator/goal
Si tiene PyPy instalado, se recomienda usarlo para la construcción:
pypy translate.py -Ojit
De otra manera:
python translate.py -Ojit
Tristemente aquí es donde mi conocimiento termina. BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
el error " BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
"
¿Qué bifurcación o combinación de paquetes debería uno usar para hacer que PyPy, Django y PostgreSQL jueguen bien juntos?
Sé que PyPy y Django juegan bien juntos, pero estoy menos seguro de PyPy y PostgreSQL. Veo que Alex Gaynor ha hecho una bifurcación de PyPy llamada pypy-postgresql . También sé que algunas personas están usando psycopg2-ctypes .
¿Hay alguna diferencia entre estos tenedores? ¿O deberíamos usar el estable 1.9 PyPy y usar psycopg2-ctypes? Usar las opciones de ctypes podría perjudicar el rendimiento, vea el comentario a continuación.
Además, ¿alguien ha experimentado algún inconveniente al usar PyPy con pyscopg2? Parece bastante fácil recurrir a CPython si algo no funciona bien, pero principalmente estoy buscando cosas que un programador pueda hacer antes de tiempo para prepararse.
Miré a mi alrededor, no parece que psycopg2 funcione de forma nativa con PyPy. Aunque, psycopg2-ctypes parece estar funcionando para algunas personas, hubo una discusión sobre pypy-dev . Trabajo en Windows, y no creo que psycopg2-ctypes esté listo para Windows todavía, lamentablemente.
Algunos recursos adicionales:
- Información de compatibilidad de PyPy: adaptadores de bases de datos
- Página de PostgreSQL en la wiki de Python
- psycopg2cffi por Konstantin Lopuhin:
Implementación basada en cffi de psycopg2 para PyPy 2.0 y versiones posteriores
( publicación de blog , repositorio de GitHub , página de PyPI , hilo de pypy-dev )
- Parece el candidato más fuerte actualmente, pero aún no lo he probado - psycopg2ct por Michael van Tellingen:
implementación basada en ctypes de psycopg2 para PyPy 1.6 y versiones posteriores
( psycopg2-ctypes , página de PyPI ) - pypy-postgresql por Alex Gaynor:
el puerto RPython abandonado de psycopg2 implementado como un tenedor de PyPy ( repositorio Bitbucket ) - pypq :
"Controlador compatible con Python PostgreSQL DBAPI 2.0 utilizando ctypes y libpq.so, funciona con PyPy"
( discussion , página PyPI ) - bpgsql :
"Cliente PostGreSQL pure-python de Barebones. Mayormente compatible con DB-API 2.0 (PEP 249). Incluye un back-end Django 1.0 experimental".
( discussion , página web , página de Código de Google ) - pg8000 :
"una interfaz Pure-Python compatible con DB-API 2.0 para el motor de base de datos PostgreSQL [...] no depende de ninguna biblioteca externa (como un módulo python compilado o la biblioteca libpq de PostgreSQL)"
( página web , repositorio GitHub , página PyPI )