2013-06-24 1 views
6

Я пытаюсь использовать Pypy-компилятор, чтобы узнать, могу ли я ускорить мой код. Тем не менее, у меня возникают проблемы с модулем MySQLdb, который 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, который попал в канонические хранилища.

+0

См. Также http://stackoverflow.com/questions/17187959/different-sys-path-between-pypy-and-normal-python. –

ответ

12

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

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

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

import pymysql 
pymysql.install_as_MySQLdb() 

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

+0

Является ли pymysql намного медленнее, чем MySQLdb? Без pypy я получаю в два раза больше времени обработки –

+0

, он должен быть лучше на pypy, затем на cpython, но я не сделал никаких тестов. обычно узким местом является производительность базы данных в любом случае. – mata

+1

Хорошо, я сделал очень простой тест с кучей вставок, запросов и удалений в тестовой таблице. cpython2.7.4 + MySQLdb: '50 циклов, лучше всего 3: 80 мс за цикл', pypy1.9.0 + pymysql:' 50 циклов, лучше всего 3: 89,7 мсек за цикл' - поэтому для этого тестового теста pypy + pymysql было около 12 % медленнее - но результат может быть не очень репрезентативным для сложных случаев. – mata