2013-06-24 36 views
6

Próbuję kompilatora Pypy, aby sprawdzić, czy mogę przyspieszyć mój kod. Niemniej jednak mam problemy z modułem MySQLdb, którego Pypy nie może znaleźć.Używanie modułu MySQLdb z kompilatorem Pypy

Czytałem, że MySQLdb 1.2.4 powinny działać prawidłowo z pypy, więc uaktualniony moduł i przetestowałem, że jest to właściwa wersja z CPython kompilatora:

import MySQLdb 
MySQLdb.__version__ 
>> '1.2.4' 

Ale podczas korzystania pypy, ja otrzymuję:

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 

Każda pomoc? Używam Ubuntu 13.04 i używam Pypy, który wszedł do repozytoriów Canonical.

+0

Zobacz również http://stackoverflow.com/questions/17187959/different-sys-path-between-pypy-and-normal-python. –

Odpowiedz

12

MySQLdb jest w większości napisany w języku C, którego pypy nie mogą bezpośrednio użyć. Będziesz musiał patch and recompile go.

Łatwiej rozwiązaniem byłoby użyć czystego python mysql złącze biblioteki, jak pymysql lub mysql-connector-python

pymysql nawet może być stosowany jako DROPIN zamiennik MySQLdb, wszystko co musisz zrobić, dodać:

import pymysql 
pymysql.install_as_MySQLdb() 

lub umieść to w module MySQLdb.py, po tym, jak kod, który importuje MySQLdb powinien działać normalnie.

+0

Czy pymysql jest dużo wolniejszy od MySQLdb? Bez pypu dostaję dwa razy więcej czasu przetwarzania –

+0

powinno być lepiej na pypie niż na cpythonie, ale nie zrobiłem żadnych testów. zwykle wąskim gardłem jest wydajność bazy danych. – mata

+1

OK, zrobiłem bardzo prosty test z dużą liczbą wstawek, zapytań i usunięć na stole testowym. cpython2.7.4 + MySQLdb: '50 pętli, najlepiej 3: 80 msek na pętlę', pypy1.9.0 + pymysql:' 50 pętli, najlepiej 3: 89,7 ms na pętlę' - więc dla tej testpacy pypy + pymysql miał około 12 % wolniej - ale wynik może nie być reprezentatywny dla skomplikowanych przypadków użycia. – mata