Bagaimana cara menginstal MySQLdb (Python data access library ke MySQL) di Mac OS X?

99

Saya seorang pemula Python, tetapi saya baru saja menghabiskan satu hari memikirkan cara membuat MySQLdb berfungsi dengan baik, dan alam semesta menurut google mencakup banyak referensi tentang apa itu PITA, dan sejumlah besar panduan yang tampaknya ketinggalan jaman. Mengingat bahwa situs ini dimaksudkan untuk mengatasi masalah semacam ini, dan saya tahu bahwa saya akan membutuhkan referensi ke solusi di masa mendatang, saya akan mengajukan pertanyaan, memberikan jawaban saya dan melihat apa lagi yang mengapung ke permukaan.

Jadi pertanyaannya adalah bagaimana membuat MySQLdb bekerja di Mac OS X?

mblackwell8
sumber

Jawaban:

133

Pembaruan bagi mereka yang menggunakan Python3: Anda cukup menggunakan conda install mysqlclientuntuk menginstal pustaka yang diperlukan untuk menggunakan MySQLdb seperti yang saat ini ada. 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, 3 pustaka ini diinstal di komputer saya).

Inilah kisah pengalaman bertele-tele saya dengan masalah ini. Akan sangat senang melihatnya diedit atau digeneralisasikan jika Anda memiliki pengalaman yang lebih baik tentang masalah ini ... terapkan sedikit keajaiban SO itu.

Catatan: Komentar di paragraf berikutnya diterapkan ke Snow Leopard, tetapi tidak untuk Lion, yang tampaknya memerlukan MySQL 64-bit

Pertama, penulis (masih?) MySQLdb mengatakan di sini bahwa salah satu masalah yang paling merusak adalah bahwa OS X diinstal dengan Python versi 32 bit, tetapi kebanyakan rata-rata orang (termasuk saya) 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 pustaka MySQLdb. Mereka sering kali memiliki perbedaan yang halus. Ini tampaknya yang paling populer bagi saya, dan memberikan solusi yang berhasil. Saya telah memperbanyaknya dengan beberapa pengeditan di bawah

Langkah 0: Sebelum saya mulai, saya berasumsi bahwa Anda telah menginstal MySQL, Python, dan GCC 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 / * - 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 simbolik di bawah lib untuk mengarah 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 ini

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 Anda selesai.

sudo python setup.py install

Langkah 9: Uji apakah berfungsi. Ini berfungsi jika Anda dapat mengimpor MySQLdb.

python

>>> import MySQLdb

Langkah 10: Jika saat mencoba mengimpor Anda menerima pesan kesalahan yang Library not loaded: libmysqlclient.18.dylibdiakhiri dengan: Reason: image not foundAnda perlu membuat satu symlink tambahan yaitu:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Anda kemudian harus bisa melakukannya import MySQLdbtanpa 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: Module _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 sangat tahan masa depan) dan mencari tahu bahwa Anda perlu cd ..keluar dari direktori build dan kesalahan akan hilang.

Seperti yang saya tulis di bagian atas, saya ingin melihat jawaban ini digeneralisasikan, karena ada banyak pengalaman spesifik lain dari masalah mengerikan ini di luar sana. Sunting, atau berikan jawaban Anda sendiri yang lebih baik.

mblackwell8
sumber
1
Perhatikan bahwa Python yang disediakan Apple pada 10.6 (Snow Leopard) lebih suka menjalankan 64-bit (ini universal 32-bit / 64-bit). Ada jebakan lain juga. Untuk sementara di seri mysql 5.1.x, tarball OS X yang dikemas oleh mysql rusak (diklaim universal tetapi tidak). Adaptor basis data untuk Python, MySQLdb, memiliki masalah sendiri. Ini adalah satu kasus di mana Anda disarankan untuk hanya menggunakan MacPorts untuk membangun semua yang Anda butuhkan secara otomatis. Terlalu mudah untuk terjadi kesalahan.
Ned Deily
Saya akan meninggalkan ini di sini kalau-kalau itu membantu orang lain. Saya juga harus memodifikasi site.cfg untuk mengatur mysql_config ke jalur yang benar. Saya tidak berpikir itu memiliki jalur pada awalnya, jadi defaultnya ke / opt / ..., tetapi saya perlu mengarahkannya ke / usr / local / mysql / ...
tchaymore
8
Saya juga harus berlari:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill
1
Saya menjalankan Lion juga, dan saya memiliki masalah besar untuk membuatnya bekerja. Saya akhirnya menemukan pertanyaan dan jawaban SO yang hebat ini dan mengikutinya 100%. Itu tidak bekerja untuk saya sampai saya menambahkan, persis seperti David Underhill disebutkan di atas: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Setelah saya menjalankan ini, itu diimpor seperti yang diharapkan ... akhirnya. Wheewwww. Hanya fyi bagi mereka yang memiliki posisi serupa.
John the King
2
Ternyata saya memiliki perpustakaan mysql tetapi hanya tidak terhubung dengan benar. Mac OS ElCapitan tidak mengizinkan penautan ke / usr / lib. Jadi ini sudah cukup bagi saya: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
101

Cara cepat dan mudah untuk Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite), dan 10.11 (El Capitan):

Saya berasumsi Anda memiliki XCode, alat baris perintahnya , Python, dan MySQL yang diinstal.

  1. Instal PIP:

    sudo easy_install pip
  2. Edit ~ / .profile: (Mungkin tidak diperlukan di Mac OS X 10.10)

    nano ~/.profile

    Salin dan tempel dua baris berikut

    export PATH=/usr/local/mysql/bin:$PATH
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

    Simpan dan keluar. Kata penutup jalankan perintah berikut:

    source  ~/.profile
  3. Instal MySQLdb

    sudo pip install MySQL-python

    Untuk menguji apakah semuanya berfungsi dengan baik coba saja

    python -c "import MySQLdb"

Itu bekerja seperti pesona bagi saya. Saya harap ini membantu.

Jika Anda menemukan kesalahan tentang pustaka yang hilang: Pustaka tidak dimuat: libmysqlclient.18.dylib maka Anda harus menautkannya menjadi /usr/libseperti ini:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
F Lekscha
sumber
2
Terima kasih, solusi ini juga berfungsi di Mac OSX 10.9 :-)
matsoftware
2
Ini berfungsi dengan baik untuk saya (Yosemite public beta; Mysql 5; Py2.7), tetapi saya perlu melakukan sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibperintah dari bawah.
Michael Scott Cuthbert
Jawaban yang bagus. Saya sudah memiliki definisi lain dari DYLD_LIBRARY_PATH di .bash_profile saya, jadi saya menambahkannya dengan cara iniexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Baru saja memverifikasi bahwa ini berfungsi dengan 10.10.4. Juga, menggunakan mysql dari homebrew, perubahan profil. Tidak diperlukan untuk membuat ini bekerja.
Isotopp
1
Setelah menginstal MySQL dengan brew install mysql, saya tidak perlu melalui langkah ke-2.
dav.garcia
36

Instal mysql dan python melalui Macports Para porter telah melakukan semua pekerjaan sulit.

sudo port install py26-mysql 
sudo port install mysql5-server

harus menginstal apa yang Anda butuhkan. (lihat Stack overflow untuk komentar tentang server mysql )

Jika Anda hanya perlu terhubung ke mysql dan tidak menjalankan server maka baris pertama sudah cukup.

Macports sekarang (awal 2013) akan menyediakan unduhan biner untuk kombinasi umum OS arsitektur yang dapat dieksekusi, untuk yang lain (dan jika Anda memintanya) itu akan dibangun dari sumber.

Secara umum macports (atau fink) membantu ketika ada pustaka kompleks dll yang perlu diinstal.

Kode hanya Python dan jika dependensi C sederhana dapat diatur melalui setuptools dll, tetapi itu mulai menjadi rumit jika Anda mencampur keduanya.

mmmmmm
sumber
3
Perhatikan bahwa ketika mulai menggunakan MacPorts, pastikan bahwa jalur Anda lebih memilih / opt / local / bin over / usr / bin karena MacPorts menginstal sesuatu di bawah / opt / local.
Teemu Kurppa
4
Iya! Dan lewati baris kedua jika Anda hanya perlu terhubung ke server MySQL yang sudah ada. Sayangnya, dengan banyaknya ketergantungan yang terlibat, mencoba menggunakan python dengan mysql di OS X adalah salah satu kasus di mana lebih mudah membiarkan MacPorts menginstal instance python tambahan daripada mencoba memainkan pengelola paket sendiri.
Ned Deily
Sebagai catatan samping, jika Anda mendapatkan peringatan penghentian, halaman berikut memiliki perbaikan: bugs.launchpad.net/python-mysqldb/+bug/341943
Jay Taylor
4
FYI, jika Anda hanya melakukan baris pertama (setidaknya dengan py27-mysql), itu akan berakhir dengan menginstal mysql5. Dengan mengunduh dan menyusun sumber. Mungkin bukan yang Anda inginkan. Grr.
Ben Hardy
@BenHardy - semuanya terinstal sesuai keinginan Anda dan apa yang saya maksudkan - juga sekarang lion dan Snow Leopard yang dapat dieksekusi dibangun secara terpusat oleh macports sehingga tidak akan melakukan kompilasi lokal dalam banyak kasus.
mmmmmm
15

Instal pip:

sudo easy_install pip

Instal minuman:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Instal mysql:

brew install mysql

Instal MySQLdb

sudo pip install MySQL-python

Jika Anda memiliki masalah kompilasi, coba edit file ~ / .profile seperti di salah satu jawaban di sini.

Ron Reiter
sumber
Terima kasih! Ini bekerja di Sierra [OSX 10.12.6 (16G29)].
Haranadh
curl: (22) URL yang diminta mengembalikan kesalahan: 404 Tidak Ditemukan
Thirupathi Thangavel
melakukan ini tetapi pip install mysqlclientsebaliknya. Bekerja!
jeremysprofile
13

Inilah langkah lain yang harus saya lalui, setelah menerima kesalahan saat menyelesaikan Langkah 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Referensi: Terima kasih! http://ageekstory.blogspot.com/2011_04_01_archive.html

Richard Boardman
sumber
9

Seperti yang dinyatakan di Menginstal MySQL-python di mac :

pip uninstall MySQL-python
brew install mysql
pip install MySQL-python

Kemudian uji:

python -c "import MySQLdb"
Telmo Dias
sumber
4

Baru saja mengalami masalah ini (lagi!) Setelah mendapatkan kotak Lion baru.

Solusi terbaik yang saya temukan (masih belum 100% optimal, tetapi berfungsi):

Anda bisa mendapatkannya dengan mengunduh XCode / Dev Tools dari Apple - ini adalah unduhan besar -

... tetapi saya merekomendasikan github ini yang memiliki apa yang Anda butuhkan (dan tidak memiliki XCode): https://github.com/kennethreitz/osx-gcc-installer

Saya mengunduh PKG bawaan mereka untuk singa, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • pastikan Anda telah mendownload versi 64-BIT dari Komunitas MYSQL. (Pemasangan DMG adalah cara yang mudah) http://dev.mysql.com/downloads/mysql/

  • Tetapkan jalur sebagai berikut:

    ekspor PATH = $ PATH: / usr / local / mysql-XXXX

    ekspor DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    ekspor ARCHFLAGS = '- arch x86_64'

CATATAN BAHWA:

1 di mysql-XXXX di atas, XXX adalah versi spesifik yang Anda unduh. (Mungkin / usr / local / mysql / juga akan berfungsi karena kemungkinan besar ini adalah alias yang sama, tetapi saya tidak akan berpura-pura mengetahui pengaturan Anda)

2 Saya telah melihatnya menyarankan agar ARCHFLAGS disetel ke '-arch i386 -arch x86_64' tetapi hanya menentukan x86_64 yang tampaknya bekerja lebih baik untuk saya. (Saya dapat memikirkan beberapa alasan untuk ini tetapi alasan tersebut tidak sepenuhnya relevan).

  • Instal binatang itu!

    easy_install MySQL-python

  • LANGKAH TERAKHIR:

Tambahkan DYLD_LIBRARY_PATH secara permanen!

Anda dapat menambahkannya ke bash_profile atau yang serupa. Ini adalah langkah yang hilang bagi saya, yang tanpanya sistem saya terus bersikeras pada berbagai kesalahan dalam menemukan _mysql.so dan seterusnya.

ekspor DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, baru saja memperhatikan solusi tautan lunak Anda, yang mungkin berlaku melakukan hal yang sama dengan solusi PATH saya ... teman-teman, apa pun yang terbaik untuk Anda.

Referensi terbaik: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

jsh
sumber
4

Anda dapat mencoba menggunakan pure-python pymysql:

sudo easy_install pymysql

(Atau gunakan pipjika Anda sudah menginstalnya.) Kemudian, tambahkan ini sebelum Anda import MySQLdbdi kode Anda:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
Collin Anderson
sumber
3

Atau coba sederhana:

> sudo easy_install MySQL-python

Jika memberikan error seperti di bawah ini:

EnvironmentError: mysql_config tidak ditemukan

, lalu jalankan ini

> export PATH=$PATH:/usr/local/mysql/bin
Shashank Agarwal
sumber
0

Jika Anda menggunakan MySQL 64 bit, menggunakan ARCHFLAGS untuk menentukan arsitektur cpu Anda saat membangun pustaka mysql-python akan berhasil:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Shan Valleru
sumber
0
export PATH=$PATH:/usr/local/mysql/bin/

harus memperbaiki masalah untuk Anda karena sistem tidak dapat menemukan file mysql_config.

Varun Bhatia
sumber
0

Di macos Sierra, ini berfungsi untuk saya, di mana python dikelola oleh anaconda:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

conda install --channel https://conda.anaconda.org/CEFCA mysql-python

Yang akan digunakan dengan SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (default, 20 Des 2016, 23:05:08) [GCC 4.2.1 Kompatibel dengan Apple LLVM 6.0 (clang-600.0.57)] di darwin Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk lebih informasi. Anaconda dipersembahkan oleh Continuum Analytics. Silakan periksa: http://continuum.io/thanks dan https://anaconda.org

>>> dari sqlalchemy import *

>>> dbengine = create_engine ('mysql: // ....')

sAguinaga
sumber
0

Jawaban ini adalah pembaruan, sekitar November 2019. Tak satu pun dari penginstalan pip populer akan memberi Anda pengaturan yang berfungsi di MacOS 10.13 (dan kemungkinan versi lain juga). Berikut adalah cara sederhana agar saya dapat bekerja:

brew install mysql
pip install mysqlclient

Jika Anda memerlukan bantuan untuk menginstal brew, lihat situs ini: https://brew.sh/

eatsfood
sumber
0

Saya mengalami masalah ini dan menemukan bahwa mysqlclientperlu tahu di mana menemukan openssl, dan OSX menyembunyikan ini secara default.

Temukan openssl dengan brew info openssl, lalu tambahkan jalur ke opensslbin Anda ke PATH Anda:

export PATH="/usr/local/opt/openssl/bin:$PATH"

Saya merekomendasikan menambahkan itu ke .zshrc atau .bashrc Anda sehingga Anda tidak perlu khawatir tentang itu di masa mendatang. Kemudian, dengan variabel itu diekspor (yang mungkin perlu menutup dan membuka kembali sesi bash Anda), tambahkan dua variabel env lagi:

# in terminal
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"

Kemudian, akhirnya, jalankan:

pipenv install mysqlclient

dan itu harus dipasang dengan baik.

Sumber: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Pabrik Elliot
sumber