Как заставить PyPy, Django и PostgreSQL работать вместе?
какую вилку или комбинацию пакетов следует использовать, чтобы сделать PyPy, Django и PostgreSQL приятными вместе?
Я знаю, что PyPy и Django хорошо играют вместе, но я менее уверен в PyPy и PostgreSQL. Я вижу, что Алекс Гейнор сделал вилку Пайпи под названием pypy-postgresql. Я также знаю, что некоторые люди используют psycopg2-ctypes.
есть ли разница между этими вилками? Или мы должны использовать стабильный 1.9 PyPy и использовать psycopg2-ctypes? Использование параметров ctypes может повредить производительности, см. комментарий ниже.
кроме того, кто-нибудь испытал какие-либо подводные камни с использованием PyPy с pyscopg2? Кажется, достаточно легко вернуться на CPython, если что-то работает неправильно, но в основном я ищу вещи, которые программист может сделать раньше времени, чтобы подготовиться.
Я огляделся, похоже, что psycopg2 не работает изначально с PyPy. Хотя, psycopg2-ctypes, похоже, работает для некоторых люди, была дискуссия на pypy-dev. Я работаю над Windows, и я не думаю, что psycopg2-ctypes готов к Windows, К сожалению.
2 ответов
psycopg2cffi (Обновлено 2015)
psycopg2cffi еще одна psycopg2-совместимая замена и должна обеспечить лучшую производительность PostgreSQL с PyPy. Добавьте это в свой settings.py
чтобы оставаться совместимым с обоими:
try:
import psycopg2
except ImportError:
# Fall back to psycopg2cffi
from psycopg2cffi import compat
compat.register()
psycopg2-ctypes (2012)
я также знаю, что некоторые люди используют psycopg2-ctypes.
это самый простой путь, чтобы остаться совместимым с обоими, просто добавьте этот код в вашем Django settings.py
:
try:
import psycopg2
except ImportError:
# Fall back to psycopg2-ctypes
from psycopg2ct import compat
compat.register()
я тестировал это несколько релизов назад; к сожалению, по моему опыту, psycopg2-ctypes отрицает небольшие повышения производительности, предоставляемые PyPy. Но YMMV, это зависит от того, насколько JIT-дружественный ваш код в целом и какую долю времени вы на самом деле тратите на запуск кода Python. И, возможно, с тех пор PyPy только улучшился.
и я не думаю, что psycopg2-ctypes готов для Windows еще
я не пробовал это, но ctypes не зависит от платформы. AFAICT вы просто должны убедиться, что libpq.dll
библиотека загружается (находится в каталоге в переменной среды PATH или локальном каталоге), и она должна работать в Windows, как и в Linux.
pypy-postgresql
я вижу, что Алекс Гейнор сделал вилку PyPy под названием PyPy-postgresql.
я не думаю, что это хороший выбор в долгосрочной перспективе. Филиал больше не обновлялся больше года, и мои попытки построить его провалились. И все равно кажется неправильным жестко кодировать драйвер PostgreSQL в интерпретаторе.
я считаю, что там нет двоичных файлов pypy-postgresql, поэтому, если вы хотите использовать его, вам нужно будет построить всю ветку PyPy самостоятельно. Не для слабонервных: это занимает десятки минут и машина с не менее 4 ГБ памяти. (Должностные инструкции: http://pypy.org/download.html#building-from-source)
чтобы построить, вам сначала нужен источник. Если у Вас установлен Mercurial, вы можете просто hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
. Если нет, вы можете загрузить файл zip automagic "tip":https://bitbucket.org/alex_gaynor/pypy-postgresql/get/tip.zip
Откройте командную строку, перейдите в распакованный каталог, а затем внутри pypy/translator/goal
если у вас установлен PyPy, рекомендуется использовать это для строительства:
pypy translate.py -Ojit
иначе:
python translate.py -Ojit
к сожалению на этом мои знания заканчиваются. Я получаю сообщение об ошибке "BytecodeCorruption: unimplemented opcode, ofs=234, code=203, name=BUILD_LIST_FROM_ARG
"
дополнительные материалы:
- PyPy информация о совместимости:DB адаптеры
- страница PostgreSQL на Python wiki
-
psycopg2cffi Константин Лопухин:
реализация на основе cffi psycopg2 для PyPy 2.0 и новее
(блоге, GitHub repo, страница PyPI, поток pypy-dev)
- это похоже на ... самый сильный кандидат в настоящее время, но я еще не тестировал его -
psycopg2ct Майкл Ван Tellingen:
ctypes на основе реализации psycopg2 для PyPy 1.6 и новее
(GitHub repo, страница PyPI) -
pypy-postgresql Алекс Гейнор:
заброшенный порт RPython psycopg2 реализован как вилка PyPy ( Bitbucket РЕПО) -
pypq:
"Python PostgreSQL DBAPI 2.0 совместимый драйвер с использованием ctypes и libpq.итак, работает с PyPy"
(обсуждение, страница PyPI) -
bpgsql:
"Barebones pure-клиент Python PostGreSQL. В основном DB-API 2.0 (PEP 249) совместимый. Включает в себя экспериментальный бэкэнд Django 1.0"
(обсуждение, веб-страницы, Код Google страница) -
pg8000:
"совместимый с DB-API 2.0 интерфейс Pure-Python для ядра СУБД PostgreSQL [...] не полагается на какие-либо внешние библиотеки (например, скомпилированный модуль python или библиотека libpq PostgreSQL)"
(веб-страницы, GitHub repo, страница PyPI)