Как заставить 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 89

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)