Welche Gabel oder Kombination von Paketen sollte man verwenden, damit PyPy, Django und PostgreSQL gut zusammenspielen?
Ich weiß, dass PyPy und Django gut zusammen spielen, aber ich bin mir bei PyPy und PostgreSQL weniger sicher. Ich sehe, dass Alex Gaynor eine Gabel aus PyPy namens pypy-postgresql hergestellt hat . Ich weiß auch, dass einige Leute psycopg2-c-Typen verwenden .
Gibt es einen Unterschied zwischen diesen Gabeln? Oder sollten wir den stabilen 1.9 PyPy verwenden und psycopg2-c-Typen verwenden? Die Verwendung der Optionen ctypes kann die Leistung beeinträchtigen (siehe Kommentar unten).
Hat jemand irgendwelche Fallstricke bei der Verwendung von PyPy mit pyscopg2 erlebt? Es scheint einfach genug zu sein, auf CPython zurückzugreifen, wenn etwas nicht richtig funktioniert, aber meistens suche ich nach Dingen, die ein Programmierer im Voraus tun kann, um sich vorzubereiten.
Ich habe mich umgesehen, es scheint nicht, dass psycopg2 nativ mit PyPy funktioniert. Obwohl psycopg2-ctypes für einige Leute zu funktionieren scheint, gab es eine Diskussion über pypy-dev . Ich arbeite unter Windows und glaube nicht, dass psycopg2-ctypes noch für Windows bereit ist, leider.
Antworten:
psycopg2cffi (aktualisiert 2015)
psycopg2cffi ist ein weiterer psycopg2-kompatibler Ersatz und sollte mit PyPy die beste PostgreSQL-Leistung bieten. Fügen Sie dies zu Ihrem hinzu
settings.py
, um mit beiden kompatibel zu bleiben:psycopg2-ctypes (2012)
Dies ist der einfachste Weg; Um mit beiden kompatibel zu bleiben, fügen Sie einfach diesen Code in Ihren Django ein
settings.py
:Ich habe das vor ein paar Releases getestet. Leider negiert psycopg2-ctypes meiner Erfahrung nach die geringen Leistungssteigerungen, die PyPy bietet. Aber YMMV, es hängt davon ab, wie JIT-freundlich Ihr Code im Allgemeinen ist und wie viel Zeit Sie tatsächlich damit verbringen, Python-Code auszuführen. Und vielleicht hat sich PyPy seitdem gerade verbessert.
Ich habe das nicht ausprobiert, aber ctypes ist plattformunabhängig. AFAICT Sie müssen nur sicherstellen, dass die
libpq.dll
Bibliothek ladbar ist (sich in einem Verzeichnis in Ihrer PATH-Umgebungsvariablen oder in einem lokalen Verzeichnis befindet) und unter Windows genau wie unter Linux funktionieren sollte.pypy-postgresql
Ich denke nicht, dass dies auf lange Sicht eine gute Wahl ist. Der Zweig wurde seit mehr als einem Jahr nicht mehr aktualisiert und meine Versuche, ihn zu erstellen, sind fehlgeschlagen. Und es scheint sowieso falsch, einen PostgreSQL-Treiber im Interpreter fest zu codieren.
Ich glaube, es gibt auch keine Binärdateien von pypy-postgresql. Wenn Sie es also verwenden möchten, müssen Sie den gesamten PyPy-Zweig selbst erstellen. Nichts für schwache Nerven: Es dauert mehrere zehn Minuten und eine Maschine mit mindestens 4 GB Arbeitsspeicher. (Offizielle Anweisungen: http://pypy.org/download.html#building-from-source )
Zum Erstellen benötigen Sie zunächst die Quelle. Wenn Sie Mercurial installiert haben, können Sie dies einfach tun
hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
. Wenn nicht, können Sie die automatische ZIP-Datei "tip" herunterladen: https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zipÖffnen Sie eine Befehlszeile, gehen Sie in das dekomprimierte Verzeichnis und dann hinein
pypy/translator/goal
Wenn Sie PyPy installiert haben, wird empfohlen, dies zum Erstellen zu verwenden:
Andernfalls:
Leider endet hier mein Wissen. Ich bekomme den Fehler "
BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
"quelle
Einige zusätzliche Ressourcen:
cffi-basierte Implementierung von psycopg2 für PyPy 2.0 und neuer
( Blog-Beitrag , GitHub-Repo , PyPI-Seite , Pypy-Dev-Thread )
- dies scheint der derzeit stärkste Kandidat zu sein, aber ich habe es noch nicht getestet
ctypes-basierte Implementierung von psycopg2 für PyPy 1.6 und neuer
( GitHub-Repo , PyPI-Seite )
aufgegebener RPython-Port von psycopg2 als Gabel von PyPy implementiert ( Bitbucket-Repo )
"Python PostgreSQL DBAPI 2.0-kompatibler Treiber mit ctypes und libpq.so funktioniert mit PyPy"
( Diskussion , PyPI-Seite )
"Barebones-PostGreSQL-Client mit reinem Python. Meistens DB-API 2.0 (PEP 249) kompatibel. Beinhaltet ein experimentelles Django 1.0-Backend"
( Diskussion , Webseite , Google-Codepage )
"Eine DB-API 2.0-kompatible Pure-Python-Schnittstelle zur PostgreSQL-Datenbank-Engine [...] basiert nicht auf externen Bibliotheken (wie einem kompilierten Python-Modul oder der libpq-Bibliothek von PostgreSQL)"
( Webseite , GitHub-Repo) , PyPI-Seite )
quelle