Saya baru saja mengkompilasi dan menginstal mysqldb untuk python 2.7 di mac os saya 10.6. Saya membuat file uji sederhana yang mengimpor
import MySQLdb as mysql
Pertama, perintah ini merah digarisbawahi dan info memberitahu saya "Impor yang belum terselesaikan". Kemudian saya mencoba menjalankan kode python sederhana berikut
import MySQLdb as mysql
def main():
conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )
if __name__ == '__main__'():
main()
Saat menjalankannya saya mendapatkan pesan kesalahan berikut
Traceback (most recent call last):
File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
import MySQLdb as mysql
File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
\namespace cvdv
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
Reason: image not found
Apa yang mungkin menjadi solusi untuk masalah saya?
EDIT: Sebenarnya saya menemukan bahwa perpustakaan terletak di / usr / local / mysql / lib. Jadi saya perlu memberi tahu versi gerhana pydev saya di mana menemukannya. Di mana saya mengatur ini?
sumber
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
mysql55
melalui MacPorts dan untuk mengatasi kesalahan ini saya lakukan:sudo ln -s mysql/libmysqlclient.18.dylib /opt/local/lib/mysql55/libmysqlclient.18.dylib
sudo ln -s /usr/local/mysql-5.5.29-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Metode pilihan saya adalah untuk benar-benar memperbaiki perpustakaan daripada bermain dengan variabel lingkungan yang mungkin atau mungkin tidak benar-benar dalam ruang lingkup tergantung pada bagaimana aplikasi dijalankan. Ini sebenarnya proses yang cukup sederhana.
Pertama, lihat output kesalahan untuk melihat di mana modul python menyinggung berada:
Oke, jadi file yang menyinggung adalah /Library/Python/2.7/site-packages/_mysql.so
Selanjutnya, cari tahu di mana menurut _mysql.so ia seharusnya menemukan libmysqlclient.18.dylib:
Jadi, ia mencari libmysqlclient.18.dylib tanpa informasi jalur, mari perbaiki:
Sekarang _mysql.so tahu path lengkap ke perpustakaan dan semuanya berfungsi, terlepas dari variabel lingkungan.
sumber
Saya menemukan ada solusi lain untuk masalah ini daripada membuat tautan simbolik.
Anda menetapkan jalur ke direktori Anda, tempat libmysqlclient.18.dylib berada, menjadi DYLD_LIBRARY_PATH variabel lingkungan. Apa yang saya lakukan adalah meletakkan baris berikut di .bash_profile saya:
Itu dia.
sumber
Dalam kasus saya, saya mendapatkan kesalahan dengan Mac OS X 10.9 Mavericks. Saya menginstal Server Komunitas MySQL langsung dari Situs Oracle / MySQL dari DMG.
Yang perlu saya lakukan adalah symlink file lib ke direktori / usr / local / lib.
Bonus: Jika Anda menjalankan Mac OS X juga, ada alat yang hebat untuk menemukan file seperti file libmysqlclient.18.dylib, http://apps.tempel.org/FindAnyFile . Beginilah awalnya saya menemukan lokasi file dylib.
sumber
/usr/local/lib
direktori, tetapi bekerja seperti pesona!Saya menemukan meletakkan ini di .profile atau .bashrc Anda (mana saja yang Anda gunakan) adalah cara termudah untuk melakukannya, tautan sym menjadi berantakan dibandingkan dengan menyimpan path di file sumber Anda.
Juga dibandingkan dengan jawaban yoshisurfs, sebagian besar waktu ketika mysql diinstal direktori mysql harus diganti nama menjadi hanya mysql, bukan seluruh nama file, untuk kemudahan penggunaan.
sumber
Saya mengalami ini dengan beberapa lingkungan virtual.
Bekerja dua kali.
sumber
Di pydev eclipse plugin, Anda mungkin ingin mengatur variabel lingkungan untuk DYLD. Path dapat diatur seperti yang ditunjukkan pada
Instal mysqldb di macan tutul salju
sumber
Bagi mereka yang menggunakan homebrew, Anda dapat memperbaikinya dengan:
sumber
Dalam Kasus saya, di El Capitan (OSX 10.11), saya harus melakukan tindak lanjut
~/.bash_profile
sumber
ketika Anda berada di El Capitan, akan mendapatkan kesalahan:
ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
harus menutup "Perlindungan Integritas Sistem".pertama, reboot dan tahan pada cmd + R untuk masuk ke mode Recovery, kemudian jalankan terminal dan ketik perintah:,
csrutil disable
sekarang Anda dapat reboot dan coba lagi.sumber
libmysqlclient.18.dylib
ke/usr/local/lib
dan menambahkan pathPATH=/usr/local/lib:$PATH
ke bash_profile. Ini bekerja untuk saya.Pada instalasi El Capitan baru di mana SIP (tanpa root mencegah akses ke usr / lib /) secara default dan Anda tidak dapat membuat symlink kecuali Anda berada dalam mode pemulihan. Seperti yang dikatakan @yannisxu Anda dapat menonaktifkan SIP dan melakukan symlink Anda ke / usr / lib / local dan ini akan berhasil.
Anda dapat menggunakan perintah berikut pada MAC OSX El Capitan alih-alih mematikan SIP:
Dulu ada opsi di mana Anda dapat login sebagai root dan ini dapat menonaktifkan SIP tetapi dalam rilis final yang sekarang sudah usang, Anda dapat membaca lebih lanjut tentang hal ini di sini: https://forums.developer.apple.com/thread/4686
Pertanyaan:
Ada perintah nvram boot-args yang tersedia di Developer Beta 1 yang dapat menonaktifkan SIP saat dijalankan dengan hak akses root:
Apakah opsi menonaktifkan SIP ini juga akan tersedia dalam versi rilis El Capitan? Atau apakah ini hanya untuk Pengembang Build?
Menjawab:
Perintah nvram boot-args ini akan hilang. Ini tidak akan tersedia dalam versi rilis El Capitan dan mungkin menghilang sebelum akhir Betas Pengembang. Mengawasi catatan rilis untuk Betas Pengembang di masa depan.
sumber
Saya memiliki masalah ini dan butuh beberapa saat untuk mencari tahu cara memperbaikinya.
Kasing saya sedikit berbeda. Server MySQL saya adalah versi 5.1.x. Dan entah bagaimana saya memutakhirkan MySQL-python saya dari 1.2.3 ke 1.2.5. Dan saya terus mendapatkan masalah ini sejak saat itu ketika saya menambahkan tautan lunak berikut.
Ternyata untuk MySQL 5.1.x tidak ada libmysqlclient.18.dylib, tetapi hanya libmysqlclient.16.dylib. Anda dapat memperbaiki masalah ini dengan menurunkan versi MySQL-python ke 1.2.3 atau memutakhirkan server MySQL Anda ke 5.6.x (Saya belum mencoba 5.5.x.)
Saya menurunkan pustaka ke 1.2.3 karena memutakhirkan MySQL bukan merupakan pilihan bagi saya.
sumber
buka http://dev.mysql.com/downloads/connector/c/ dan unduh MySQL Connector / C. setelah mendapatkan paket, buat direktori baru 'mysql', buka kompresi file Konektor Mysql di bawah direktori mysql, lalu di bawah mysql, buat direktori kosong 'build'.we akan menggunakan' build 'untuk membangun MySQL Connector / C. cd build && cmake ../your-MySQL-Connector-source-dir make && make install setelah make install, Anda akan mendapatkan direktori bernama mysql di bawah / usr / local. itu berisi semua header dan lib yang Anda butuhkan.pergi ke direktori ini, dan salin header dan lib ke lokasi yang sesuai.
sumber
Anda dapat mencoba:
sumber
Catatan tentang bug Connector MySQL / C pada macOS (versi saya saat ini adalah 10.13.2), perbaiki mysql_config dan instal ulang mysqlclient atau MySQL-python, berikut ini detailnya
sumber