Pembaruan bagi mereka yang menggunakan Python3: Anda cukup menggunakan conda install mysqlclient
untuk menginstal perpustakaan yang diperlukan untuk menggunakan MySQLdb seperti yang ada saat ini. Pertanyaan SO berikut adalah petunjuk yang berguna:Python 3 ImportError:Tidak ada modul bernama 'ConfigParser'
. Menginstal mysqlclient akan menginstal mysqlclient, mysql-connector, dan llvmdev (setidaknya, ini menginstal 3 perpustakaan ini di mesin saya).
Berikut adalah kisah pengalaman bertele-tele saya dengan masalah ini. Akan senang melihatnya diedit atau digeneralisasi jika Anda memiliki pengalaman yang lebih baik tentang masalah ini... terapkan sedikit keajaiban itu.
Catatan:Komentar di paragraf berikutnya diterapkan pada Snow Leopard, tetapi tidak pada Lion, yang tampaknya memerlukan MySQL 64-bit
Pertama, penulis (masih?) MySQLdb mengatakan disini bahwa salah satu masalah yang paling merusak adalah bahwa OS X datang terinstal dengan versi 32 bit dari Python, tetapi kebanyakan joes rata-rata (termasuk saya sendiri) mungkin melompat untuk menginstal versi 64 bit dari MySQL. Langkah buruk... hapus versi 64 bit jika Anda telah menginstalnya (petunjuk tentang tugas fiddly ini tersedia di SO di sini ), lalu unduh dan instal versi 32 bit (paket di sini )
Ada banyak langkah-demi-langkah tentang cara membangun dan menginstal perpustakaan MySQLdb. Mereka sering memiliki perbedaan yang halus. Ini tampaknya yang paling populer bagi saya, dan memberikan solusi yang berfungsi. Saya telah mereproduksinya dengan beberapa pengeditan di bawah
Langkah 0: Sebelum saya mulai, saya berasumsi bahwa Anda memiliki MySQL, Python, dan GCC diinstal di mac.
Langkah 1: Unduh adaptor MySQL untuk Python terbaru dari SourceForge.
Langkah 2: Ekstrak paket yang Anda unduh:
tar xzvf MySQL-python-1.2.2.tar.gz
Langkah 3: Di dalam folder, bersihkan paket:
sudo python setup.py clean
PASANGAN LANGKAH TAMBAHAN, (dari komentar ini )
Langkah 3b: Hapus semua yang ada di direktori MySQL-python-1.2.2/build/* Anda -- jangan percaya "python setup.py clean" untuk melakukannya untuk Anda
Langkah 3c: Hapus telur di bawah Users/$USER/.python-eggs
Langkah 4: Awalnya diperlukan pengeditan _mysql.c, tetapi sekarang TIDAK PERLU LAGI. Komunitas MySQLdb tampaknya telah memperbaiki bug ini sekarang.
Langkah 5: Buat tautan simbolis di bawah lib untuk menunjuk ke sub-direktori bernama mysql. Ini adalah tempat yang dicari selama kompilasi.
sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql
Langkah 6: Edit setup_posix.py dan ubah yang berikut
mysql_config.path ="mysql_config"
untuk
mysql_config.path ="/usr/local/mysql/bin/mysql_config"
Langkah 7: Di direktori yang sama, buat kembali paket Anda (abaikan peringatan yang menyertainya)
sudo python setup.py build
Langkah 8: Instal paket dan selesai.
sudo python setup.py install
Langkah 9: Uji apakah itu berfungsi. Ini berfungsi jika Anda dapat mengimpor MySQLdb.
python
>>> import MySQLdb
Langkah 10: Jika saat mencoba mengimpor Anda menerima pesan kesalahan yang mengeluhkan Library not loaded: libmysqlclient.18.dylib
diakhiri dengan:Reason: image not found
anda perlu membuat satu symlink tambahan yaitu:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Anda kemudian dapat import MySQLdb
tanpa kesalahan.
Satu masalah terakhir adalah jika Anda memulai Python dari direktori build, Anda akan mendapatkan kesalahan ini:
/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3:UserWarning:Modul _mysql sudah diimpor dari /Library/Python/2.5/ site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc, tetapi XXXX/MySQL-python-1.2.3c1 sedang ditambahkan ke sys.path
Ini cukup mudah bagi Google, tetapi untuk menyelamatkan Anda dari masalah, Anda akan berakhir di sini
(atau mungkin tidak... bukan URL yang tahan masa depan) dan cari tahu bahwa Anda perlu cd ..
keluar dari direktori build dan kesalahan akan hilang.
Seperti yang saya tulis di atas, saya ingin melihat jawaban ini digeneralisasi, karena ada banyak pengalaman spesifik lainnya dari masalah mengerikan ini di luar sana. Edit, atau berikan jawaban Anda sendiri yang lebih baik.