Как вы можете работать с PyPy, Django и PostgreSQL?

Какую вилку или комбинацию пакетов следует использовать, чтобы PyPy, Django и PostgreSQL играли вместе?

Я знаю, что PyPy и Django играют хорошо вместе, но я менее уверен в PyPy и PostgreSQL. Я вижу, что Алекс Гейнор сделал вилку PyPy под названием pypypostgresql . Я также знаю, что некоторые люди используют psycopg2-ctypes .

Есть ли разница между этими вилами? Или мы должны использовать стабильный 1.9 PyPy и использовать psycopg2-ctypes? Использование параметров ctypes может повредить производительность, см. Комментарий ниже.

Кроме того, кто-нибудь испытал любые подводные камни с использованием PyPy с pyscopg2? Кажется, достаточно легко вернуться на CPython, если что-то не работает правильно, но в основном я ищу вещи, которые программист может сделать заблаговременно, чтобы подготовиться.

Я огляделся, кажется, что psycopg2 не работает с PyPy. Хотя, psycopg2-ctypes, похоже, работает для некоторых людей, была дискуссия о pypy-dev . Я работаю над Windows, и я не думаю, что psycopg2-ctypes уже готов к Windows, к сожалению.

  • понимание перечня
  • Вставьте Pandas Dataframe в mongodb, используя PyMongo
  • python 3: TypeError: конфликт метакласса: метакласс производного класса должен быть (нестрогим) подклассом метаклассов всех его оснований
  • Не удается заставить Elasticsearch работать с Django
  • Python - самый быстрый способ проверить, содержит ли строка определенные символы в любом из элементов списка
  • Как вы получите следующее значение в последовательности с плавающей точкой?
  • sqlite3.ProgrammingError: Неправильное количество привязок. В текущем заявлении используется 1, и имеется 74 поставленных
  • Помещение переменной внутри строки (python)
  • 2 Solutions collect form web for “Как вы можете работать с PyPy, Django и PostgreSQL?”

    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 Django.py:

     try: import psycopg2 except ImportError: # Fall back to psycopg2-ctypes from psycopg2ct import compat compat.register() 

    Я проверил это несколько выпусков назад; к сожалению, по моему опыту, psycopg2-ctypes отрицает небольшие выигрыши в производительности, которые дает PyPy. Но YMMV, это зависит от того, как JIT-friendly ваш код вообще и какая часть времени вы фактически тратите на запуск кода 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-файл с автоматическим «подсказкой»: 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
    • psycopg2cffi Константин Лопухин:
      Реализация psycopg2 для PyPy 2.0 и новее на основе cffi
      ( запись в блоге , реплика GitHub , страница PyPI , поток pypy-dev )
      – сейчас это выглядит как самый сильный кандидат, но я еще не тестировал его
    • psycopg2ct Майкл ван Теллинген:
      ctypes-реализация psycopg2 для PyPy 1.6 и более новая
      ( GitHub repo , страница PyPI )
    • pypy-postgresql от Alex Gaynor:
      заброшенный порт RPython psycopg2, реализованный как вилка PyPy ( ретрансляция Bitbucket )
    • pypq :
      «Python PostgreSQL DBAPI 2.0 совместимый драйвер с использованием ctypes и libpq.so, работает с 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 , страница PyPI )
    Interesting Posts
    Python - лучший язык программирования в мире.