2013-06-24 34 views
6

Tôi đang thử trình biên dịch Pypy để xem liệu tôi có thể tăng tốc mã của mình hay không. Tuy nhiên, tôi đang gặp rắc rối với mô-đun MySQLdb, mà Pypy không thể tìm thấy.Sử dụng mô-đun MySQLdb với trình biên dịch Pypy

Tôi đã đọc rằng MySQLdb 1.2.4 nên làm việc tốt với PyPy, vì vậy tôi đã nâng cấp mô-đun, và tôi đã kiểm tra rằng nó là phiên bản đúng với trình biên dịch CPython:

import MySQLdb 
MySQLdb.__version__ 
>> '1.2.4' 

Nhưng khi sử dụng PyPy, tôi 'm getting:

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 

Mọi trợ giúp? Tôi đang chạy trên Ubuntu 13.04 và sử dụng Pypy mà đi vào kho Canonical.

+0

Xem thêm http://stackoverflow.com/questions/17187959/different-sys-path-between-pypy-and-normal-python. –

Trả lời

12

MySQLdb chủ yếu được viết bằng C mà pypy không thể sử dụng trực tiếp. Bạn cần phải patch and recompile nó.

Các giải pháp dễ dàng hơn sẽ được sử dụng một thư viện kết nối python mysql tinh khiết, giống như pymysql hoặc mysql-connector-python

pymysql thậm chí có thể được sử dụng để thay thế DROPIN cho MySQLdb, tất cả các bạn cần làm thêm:

import pymysql 
pymysql.install_as_MySQLdb() 

hoặc đặt trong mô-đun MySQLdb.py, sau mã đó nhập MySQLdb sẽ hoạt động bình thường.

+0

Pymysql có chậm hơn nhiều so với MySQLdb không? Nếu không pypy tôi nhận được gấp đôi thời gian xử lý nhiều –

+0

nó nên được cách tốt hơn trên pypy sau đó trên cpython, nhưng tôi đã không thực hiện bất kỳ điểm chuẩn. thường là nút cổ chai là hiệu suất cơ sở dữ liệu anyway. – mata

+1

OK, tôi đã thực hiện thử nghiệm rất đơn giản với một loạt các chèn, truy vấn và xóa trên một bảng thử nghiệm. cpython2.7.4 + MySQLdb: '50 vòng lặp, tốt nhất là 3: 80 msec mỗi vòng lặp', pypy1.9.0 + pymysql:' 50 vòng, tốt nhất là 3: 89.7 msec trên mỗi vòng lặp - vì vậy cho testcase pypy + pymysql này là khoảng 12 % chậm hơn - nhưng kết quả có thể không thực sự đại diện cho các giai đoạn phức tạp của mor. – mata

Các vấn đề liên quan