2013-06-24 11 views
6

私は自分のコードをスピードアップできるかどうかを確認するためにPypyコンパイラを試しています。それにもかかわらず、私はPypyが見つけることができないMySQLdbモジュールに問題があります。PypyコンパイラでMySQLdbモジュールを使用する

私はMySQLdbは1.2.4がPypyで正常に動作する必要がありますことを読んだことがあるので、私はモジュールをアップグレードして、私はそれはCPythonのコンパイラと右のバージョンであることをテストした:

import MySQLdb 
MySQLdb.__version__ 
>> '1.2.4' 

しかしPypyを使用して、I取得:

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を使い、Canonicalリポジトリに入ったPypyを使用しています。

+0

http://stackoverflow.com/questions/17187959/different-sys-path-between-pypy-and-normal-pythonも参照してください。 –

答えて

12

MySQLdbは、ほとんどがC言語で書かれており、pypyは直接使用できません。 patch and recompileにする必要があります。

簡単に解決策ものMySQLdbのためDROPIN代替として使用することができpymysqlまたはmysql-connector-python

pymysqlのように、純粋なPythonのMySQLのコネクター・ライブラリーを使用することです、あなたがする必要があるすべての追加:

import pymysql 
pymysql.install_as_MySQLdb() 

を入力するか、MySQLdb.pyというモジュールに入れてください。MySQLdbをインポートするコードは正常に動作します。

+0

pymysqlはMySQLdbよりもはるかに遅いですか? pypyがなければ、私は2倍の処理時間を得ています –

+0

これはppyの方がcpython上の方が良いはずですが、ベンチマークは行っていません。とにかくボトルネックはデータベースのパフォーマンスです。 – mata

+1

OK、私は、テストテーブルで一連の挿入、照会、削除を行う非常にシンプルなテストを行ってきました。 cpython2.7.4 + MySQLdb: '50個のループ、最高3:80 msec /ループ '、pypy1.9.0 + pymysql:' 50個のループ、3個のうちの最高値:89.7 msec per loop' - このテストケースでは、pypy + pymysqlは約12遅いですが、結果は実際には複雑な用途にはあてはまらないかもしれません。 – mata