Использование модуля MySQLdb с компилятором Pypy

Я пытаюсь использовать компилятор Pypy, чтобы посмотреть, смогу ли я ускорить свой код. Тем не менее, у меня проблемы с модулем MySQLdb, который Pypy не может найти.

Я читал, что MySQLdb 1.2.4 должен нормально работать с Pypy, поэтому я обновил модуль и проверил, что это правильная версия с компилятором CPython:

import MySQLdb
MySQLdb.__version__
>> '1.2.4'

Но при использовании Pypy я получаю:

Python 2.7.2 (1.9+dfsg-1, Jun 19 2012, 23:23:45)
[PyPy 1.9.0 with GCC 4.7.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
And now for something completely different: ``-FIRST they ignore you, then they
laugh at you, then they fight you, then you win.-''
>>>> import MySQLdb
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ImportError: No module named MySQLdb

Любая помощь? Я использую Ubuntu 13.04 и использую Pypy, который попал в репозитории Canonical.


person Roman Rdgz    schedule 24.06.2013    source источник
comment
См. также stackoverflow. com/questions/17187959/.   -  person Armin Rigo    schedule 24.06.2013


Ответы (1)


MySQLdb в основном написан на C, который pypy не может использовать напрямую. Вам нужно будет исправить и перекомпилировать его.

Более простым решением было бы использовать чистую библиотеку коннекторов mysql для python, например pymysql или mysql-connector-python

pymysql можно даже использовать в качестве замены MySQLdb, все, что вам нужно сделать, это добавить:

import pymysql
pymysql.install_as_MySQLdb()

или поместите это в модуль MySQLdb.py, после этого код, который импортирует MySQLdb, должен работать нормально.

person mata    schedule 24.06.2013
comment
Является ли pymysql намного медленнее, чем MySQLdb? Без pypy я получаю в два раза больше времени обработки - person Roman Rdgz; 26.06.2013
comment
это должно быть лучше на pypy, чем на cpython, но я не проводил никаких тестов. обычно узким местом в любом случае является производительность базы данных. - person mata; 26.06.2013
comment
Хорошо, я сделал очень простой тест с кучей вставок, запросов и удалений в тестовой таблице. cpython2.7.4+MySQLdb: 50 loops, best of 3: 80 msec per loop, pypy1.9.0+pymysql: 50 loops, best of 3: 89.7 msec per loop — так что для этого теста pypy+pymysql был примерно на 12% медленнее — но результат может быть нерепрезентативным для более сложных вариантов использования. - person mata; 26.06.2013
comment
Да, без pypy pymysql очень медленный. Я использую oursql и пытался преобразовать в pymysql для совместимости с pypy, но теперь обработка слишком высока. - person radtek; 13.01.2018