Как вы получаете 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.
Это самый простой способ; чтобы оставаться совместимым с обоими, просто добавьте этот код в свой 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)
Для сборки сначала нужен источник. Если у вас установлен Mercurial, вы можете просто hg clone https://bitbucket.org/alex_gaynor/pypy-postgresql
, Если нет, вы можете загрузить автоматический zip-файл "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: адаптеры БД
- Страница PostgreSQL на вики Python
- psycopg2cffi Константин Лопухин:
реализация psycopg2 для PyPy 2.0 и новее на основе cffi
( сообщение в блоге, репозиторий GitHub, страница PyPI, тема pypy-dev)
- это выглядит как самый сильный кандидат в настоящее время, но я еще не проверял это - psycopg2ct Майкл ван Теллинген:
Реализация psycopg2 на основе ctypes для PyPy 1.6 и новее
( Репозиторий GitHub, страница PyPI) - pypy-postgresql Алекс Гейнор:
заброшенный RPython-порт psycopg2 реализован как форк PyPy ( репозиторий Bitbucket) - pypq:
"Python PostgreSQL DBAPI 2.0 совместимый драйвер, использующий ctypes и libpq.so, работает с PyPy"
( обсуждение, страница PyPI) - bpgsql:
"Чистый Python PostGreSQL клиент Barebones. В основном совместим с DB-API 2.0 (PEP 249). Включает экспериментальный бэкэнд Django 1.0"
( обсуждение, веб-страница, кодовая страница Google) - pg8000:
"Интерфейс Pure-Python, совместимый с DB-API 2.0, с механизмом баз данных PostgreSQL [...] не зависит от каких-либо внешних библиотек (таких как скомпилированный модуль Python или библиотека PostgreSQL libpq)"
( веб-страница, репозиторий GitHub, страница PyPI)