Właśnie skompilowałem i zainstalowałem mysqldb dla Pythona 2.7 na moim Mac OS 10.6. Stworzyłem prosty plik testowy, który importuje
import MySQLdb as mysql
Po pierwsze, to polecenie jest podkreślone na czerwono, a informacja mówi mi „Nierozwiązany import”. Następnie próbowałem uruchomić następujący prosty kod w Pythonie
import MySQLdb as mysql
def main():
conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )
if __name__ == '__main__'():
main()
Podczas wykonywania go otrzymuję następujący komunikat o błędzie
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
Jakie może być rozwiązanie mojego problemu?
EDYCJA: Właściwie dowiedziałem się, że biblioteka znajduje się w / usr / local / mysql / lib. Muszę więc powiedzieć mojej wersji zaćmienia pydev, gdzie ją znaleźć. Gdzie mam to ustawić?
źródło
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
mysql55
przez MacPorts i aby rozwiązać ten błąd: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
Moją preferowaną metodą jest naprawienie biblioteki, a nie granie ze zmiennymi środowiskowymi, które mogą, ale nie muszą, znajdować się w zakresie, w zależności od sposobu uruchomienia aplikacji. W rzeczywistości jest to dość prosty proces.
Najpierw spójrz na wyjście błędu, aby zobaczyć, gdzie znajduje się problematyczny moduł Pythona:
OK, więc naruszający plik to /Library/Python/2.7/site-packages/_mysql.so
Następnie dowiedz się, gdzie według _mysql.so powinien znaleźć libmysqlclient.18.dylib:
Tak więc szuka libmysqlclient.18.dylib bez informacji o ścieżce, naprawmy to:
Teraz _mysql.so zna pełną ścieżkę do biblioteki i wszystko działa, niezależnie od zmiennych środowiskowych.
źródło
Odkryłem, że istnieje inne rozwiązanie tego problemu, zamiast tworzyć dowiązanie symboliczne.
Ustawiasz ścieżkę do swojego katalogu, w którym znajduje się libmysqlclient.18.dylib, na zmienną środowiskową DYLD_LIBRARY_PATH. To, co zrobiłem, to umieścić następujący wiersz w moim .bash_profile:
Otóż to.
źródło
W moim przypadku otrzymywałem błąd w systemie Mac OS X 10.9 Mavericks. Zainstalowałem MySQL Community Server bezpośrednio z witryny Oracle / MySQL firmy DMG.
Wszystko, co musiałem zrobić, to dowiązać symboliczne pliki lib do katalogu / usr / local / lib.
Bonus: jeśli używasz również Mac OS X, istnieje świetne narzędzie do wyszukiwania plików, takich jak plik libmysqlclient.18.dylib, http://apps.tempel.org/FindAnyFile . W ten sposób pierwotnie znalazłem lokalizację pliku dylib.
źródło
/usr/local/lib
katalog, ale działałem jak marzenie!Odkryłem, że umieszczenie tego w twoim .profile lub .bashrc (cokolwiek używasz) jest najłatwiejszym sposobem na zrobienie tego, linki symboliczne są niechlujne w porównaniu do utrzymywania ścieżek w plikach źródłowych.
Również w porównaniu z odpowiedzią yoshisurfs, przez większość czasu, gdy mysql jest instalowany, nazwa katalogu mysql powinna zostać zmieniona na mysql, a nie całą nazwę pliku, aby ułatwić korzystanie z niego.
źródło
Wpadłem na to z kilkoma środowiskami wirtualnymi.
Pracował za każdym razem.
źródło
We wtyczce pydev eclipse możesz chcieć ustawić zmienną środowiskową dla DYLD. Ścieżkę można ustawić tak, jak pokazano w
Zainstaluj mysqldb na snow leopard
źródło
Dla osób używających homebrew możesz to naprawić za pomocą:
źródło
W moim przypadku w El Capitan (OSX 10.11) muszę wykonać następujące czynności
~/.bash_profile
źródło
kiedy jesteś w El Capitan, pojawi się błąd:
ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted
musisz zamknąć „Ochrona integralności systemu”.najpierw uruchom ponownie i przytrzymaj cmd + R, aby przejść do trybu odzyskiwania, a następnie uruchom terminal i wpisz polecenie:,
csrutil disable
teraz możesz ponownie uruchomić komputer i spróbować ponownie.źródło
libmysqlclient.18.dylib
do/usr/local/lib
i dodać ścieżkęPATH=/usr/local/lib:$PATH
do bash_profile. To działa na mnie.W nowej instalacji El Capitan, gdzie SIP (rootless uniemożliwia dostęp do usr / lib /) jest domyślnie włączony i nie możesz utworzyć dowiązania symbolicznego, chyba że jesteś w trybie odzyskiwania. Jak powiedział @yannisxu, możesz wyłączyć SIP i zrobić swoje dowiązanie symboliczne do / usr / lib / local i to zadziała.
możesz użyć następującego polecenia na MAC OSX El Capitan zamiast wyłączać SIP:
Kiedyś istniała opcja, w której można było zalogować się jako root, co może wyłączyć SIP, ale w ostatecznej wersji, która jest teraz przestarzała, możesz przeczytać więcej na ten temat tutaj: https://forums.developer.apple.com/thread/4686
Pytanie:
W Developer Beta 1 dostępne jest polecenie nvram boot-args, które może wyłączyć SIP, gdy jest uruchamiane z uprawnieniami roota:
Czy ta opcja wyłączenia SIP będzie również dostępna w wydanej wersji El Capitan? Czy jest to wyłącznie dla kompilacji deweloperskich?
Odpowiedź:
To polecenie nvram boot-args zniknie. Nie będzie dostępny w wydanej wersji El Capitan i może zniknąć przed końcem Developer Beta. Miej oko na informacje o wydaniu przyszłych wersji beta deweloperów.
źródło
Miałem ten problem i zajęło mi trochę czasu, zanim wymyśliłem, jak to naprawić.
Mój przypadek jest nieco inny. Serwer MySQL jest w wersji 5.1.x. W jakiś sposób zaktualizowałem MySQL-python z 1.2.3 do 1.2.5. I ciągle otrzymywałem ten problem od tego czasu, dodałem następujący miękki link.
Okazuje się, że dla MySQL 5.1.x nie ma biblioteki libmysqlclient.18.dylib, a jedynie libmysqlclient.16.dylib. Możesz rozwiązać ten problem, obniżając MySQL-python do wersji 1.2.3 lub aktualizując serwer MySQL do 5.6.x (nie próbowałem jeszcze 5.5.x.)
Zdegradowałem bibliotekę do wersji 1.2.3, ponieważ aktualizacja MySQL nie jest dla mnie opcją.
źródło
przejdź do http://dev.mysql.com/downloads/connector/c/ i pobierz MySQL Connector / C. po otrzymaniu pakietu utwórz nowy katalog 'mysql', zdekompresuj plik Mysql Connector w katalogu mysql, a następnie w mysql, utwórz kolejny pusty katalog 'build'. użyjemy 'build' do zbudowania MySQL Connector / C. cd build && cmake ../your-MySQL-Connector-source-dir make && make install po make install, otrzymasz katalog o nazwie mysql w / usr / local. zawiera wszystkie potrzebne nagłówki i biblioteki. przejdź do tego katalogu i skopiuj nagłówki i biblioteki do odpowiednich lokalizacji.
źródło
możesz spróbować:
źródło
Uwaga o błędzie MySQL Connector / C na macOS (moja aktualna wersja to 10.13.2), napraw mysql_config i ponownie zainstaluj mysqlclient lub MySQL-python, oto szczegóły
źródło