Percabangan, atau kombinasi paket apa yang harus digunakan seseorang untuk membuat PyPy, Django dan PostgreSQL bermain bagus bersama?
Saya tahu bahwa PyPy dan Django bermain bagus bersama, tetapi saya kurang yakin tentang PyPy dan PostgreSQL. Saya melihat bahwa Alex Gaynor telah membuat garpu PyPy yang disebut pypy-postgresql . Saya juga tahu bahwa beberapa orang menggunakan psycopg2-ctypes .
Apakah ada perbedaan antara garpu ini? Atau haruskah kita menggunakan 1.9 PyPy yang stabil dan menggunakan psycopg2-ctypes? Menggunakan opsi ctypes dapat merusak kinerja, lihat komentar di bawah.
Juga, apakah ada yang mengalami kesulitan dalam menggunakan PyPy dengan pyscopg2? Tampaknya cukup mudah untuk kembali ke CPython jika ada sesuatu yang tidak berfungsi dengan baik, tetapi kebanyakan saya mencari hal-hal yang dapat dilakukan programmer sebelumnya untuk mempersiapkannya.
Saya melihat sekeliling, tampaknya psycopg2 tidak berfungsi secara native dengan PyPy. Meskipun, psycopg2-ctypes tampaknya berfungsi untuk sebagian orang, ada diskusi tentang pypy-dev . Saya bekerja di Windows, dan saya rasa psycopg2-ctypes belum siap untuk Windows, sayangnya.
Jawaban:
psycopg2cffi (Diperbarui 2015)
psycopg2cffi adalah pengganti lain yang kompatibel dengan psycopg2 dan harus memberikan kinerja PostgreSQL terbaik dengan PyPy. Tambahkan ini ke Anda
settings.py
agar tetap kompatibel dengan keduanya:try: import psycopg2 except ImportError: # Fall back to psycopg2cffi from psycopg2cffi import compat compat.register()
psycopg2-ctypes (2012)
Ini cara termudah; agar tetap kompatibel dengan keduanya, cukup tambahkan kode ini di Django Anda
settings.py
:try: import psycopg2 except ImportError: # Fall back to psycopg2-ctypes from psycopg2ct import compat compat.register()
Saya menguji ini beberapa rilis yang lalu; sayangnya dalam pengalaman saya, psycopg2-ctypes meniadakan peningkatan kinerja kecil yang diberikan oleh PyPy. Tapi YMMV, itu tergantung pada seberapa ramah JIT kode Anda secara umum dan berapa banyak waktu yang Anda habiskan untuk menjalankan kode Python. Dan mungkin PyPy baru saja berkembang sejak saat itu.
Saya belum mencoba ini, tetapi ctypes tidak bergantung pada platform. AFAICT Anda hanya perlu memastikan bahwa
libpq.dll
pustaka dapat dimuat (terletak di direktori di variabel lingkungan PATH atau direktori lokal Anda) dan itu harus bekerja di Windows seperti di Linux.pypy-postgresql
Saya rasa ini bukan pilihan yang baik dalam jangka panjang. Cabang tersebut belum diperbarui selama lebih dari satu tahun dan upaya saya untuk membangunnya gagal. Dan tampaknya salah untuk membuat kode keras driver PostgreSQL di interpreter.
Saya percaya tidak ada binari di luar sana dari pypy-postgresql, jadi jika Anda ingin menggunakannya, Anda perlu membangun seluruh cabang PyPy sendiri. Bukan untuk menjadi lemah hati: dibutuhkan puluhan menit dan mesin dengan memori minimal 4 GB. (Instruksi resmi: http://pypy.org/download.html#building-from-source )
Untuk membangun, Anda membutuhkan sumbernya terlebih dahulu. Jika Anda menginstal Mercurial, Anda dapat melakukannya dengan mudah
hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
. Jika tidak, Anda dapat mengunduh file zip "tip" automagic: https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zipBuka baris perintah, masuk ke direktori yang didekompresi, lalu masuk ke dalam
pypy/translator/goal
Jika Anda menginstal PyPy, disarankan untuk menggunakannya untuk membangun:
pypy translate.py -Ojit
Jika tidak:
python translate.py -Ojit
Sayangnya di sinilah pengetahuan saya berakhir. Saya mendapatkan kesalahan "
BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
"sumber
Beberapa sumber tambahan:
implementasi berbasis cffi dari psycopg2 untuk PyPy 2.0 dan yang lebih baru
( posting blog , repo GitHub , halaman PyPI , utas pypy-dev )
- ini terlihat seperti kandidat terkuat saat ini, tetapi saya belum mengujinya
implementasi berbasis ctypes dari psycopg2 untuk PyPy 1.6 dan yang lebih baru
( GitHub repo , halaman PyPI )
port RPython dari psycopg2 yang ditinggalkan diimplementasikan sebagai garpu PyPy ( Bitbucket repo )
"Driver yang sesuai dengan Python PostgreSQL DBAPI 2.0 menggunakan ctypes dan libpq.so, bekerja dengan PyPy"
( diskusi , halaman PyPI )
"Barebones pure-python PostGreSQL client. Sebagian besar sesuai dengan DB-API 2.0 (PEP 249). Termasuk backend Django 1.0 eksperimental"
( diskusi , halaman web , halaman Google Code )
"antarmuka Pure-Python yang kompatibel dengan DB-API 2.0 ke mesin database PostgreSQL [...] tidak bergantung pada pustaka eksternal (seperti modul python yang dikompilasi, atau pustaka libpq PostgreSQL)"
( halaman web , repo GitHub , Halaman PyPI )
sumber