Как заставить PyPy, Django и PostgreSQL работать вместе?
какую вилку или комбинацию пакетов следует использовать, чтобы заставить PyPy, Django и PostgreSQL играть хорошо вместе?
Я знаю, что PyPy и Django хорошо играют вместе, но я менее уверен в PyPy и PostgreSQL. Я вижу, что Алекс Гейнор сделал вилку из PyPy под названием 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.
это самый простой путь, чтобы остаться совместимым с обоими, просто добавьте этот код в вашем Джанго
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 page,в PyPy-dev тема)
– это выглядит как самый сильный кандидат в настоящее время, но я еще не проверил его- psycopg2ct Майкл Ван Tellingen:
ctypes на основе реализации psycopg2 для PyPy 1.6 и новее
(GitHub repo,PyPI page)- pypy-postgresql Алекс Гейнор:
заброшенный rpython порт psycopg2 реализован как вилка PyPy ( Bitbucket РЕПО)- pypq:
"Python PostgreSQL DBAPI 2.0 совместимый драйвер с использованием ctypes и libpq.so, работает с PyPy"
(обсуждение,PyPI page)- bpgsql:
"Barebones pure-python PostGreSQL клиент. В основном DB-API 2.0 (PEP 249) совместим. Включает в себя экспериментальный Django 1.0 backend"
(обсуждение,веб-страницы,Код Google страница)- pg8000:
"совместимый с DB-API 2.0 интерфейс Pure-Python для ядра СУБД PostgreSQL [...] не полагается на какие-либо внешние библиотеки (например, скомпилированный модуль python или библиотека libpq PostgreSQL)"
(веб-страницы,GitHub repo,PyPI page)