Jak zainstalować MySQLdb (bibliotekę dostępu do danych Pythona do MySQL) w systemie Mac OS X?

99

Jestem nowicjuszem w Pythonie, ale właśnie spędziłem dzień pracując nad poprawnym działaniem MySQLdb, a wszechświat według google zawiera liczne odniesienia do tego, czym jest PITA, i niezmierną liczbę przewodników, które wydają się być przestarzały. Biorąc pod uwagę, że ta strona ma na celu rozwiązanie tego rodzaju problemów i wiem, że będę potrzebować odniesienia do rozwiązania w przyszłości, zadam pytanie, udzielę odpowiedzi i zobaczę, co jeszcze pojawia się w powierzchnia.

Więc pytanie brzmi, jak sprawić, by MySQLdb działało na Mac OS X?

mblackwell8
źródło

Odpowiedzi:

133

Aktualizacja dla tych, którzy używają Python3: Możesz po prostu użyć conda install mysqlclientdo zainstalowania bibliotek wymaganych do korzystania z MySQLdb, tak jak obecnie. Pomocną wskazówką było następujące pytanie SO: Python 3 ImportError: Brak modułu o nazwie „ConfigParser” . Zainstalowanie mysqlclient spowoduje zainstalowanie mysqlclient, mysql-connector i llvmdev (przynajmniej zainstalował te 3 biblioteki na moim komputerze).

Oto opowieść o moim chaotycznym doświadczeniu z tym problemem. Chciałbym, aby to zostało zredagowane lub uogólnione, jeśli masz lepsze doświadczenie w tym problemie ... zastosuj trochę tej TAK magii.

Uwaga: Komentarze w następnym akapicie dotyczą systemu Snow Leopard, ale nie Lion, który wydaje się wymagać 64-bitowego MySQL

Po pierwsze, autor (wciąż?) MySQLdb mówi tutaj, że jednym z najbardziej zgubnych problemów jest to, że OS X jest instalowany z 32-bitową wersją Pythona, ale większość przeciętnych joesów (łącznie ze mną) prawdopodobnie przeskakuje, aby zainstalować wersję 64-bitową MySQL. Zły ruch ... usuń wersję 64-bitową, jeśli ją zainstalowałeś (instrukcje dotyczące tego skrzypiącego zadania są dostępne na SO tutaj ), a następnie pobierz i zainstaluj wersję 32-bitową (pakiet tutaj )

Istnieje wiele instrukcji krok po kroku, jak zbudować i zainstalować biblioteki MySQLdb. Często mają subtelne różnice. To mi się to najbardziej popularne i zapewniło działające rozwiązanie. Powtórzyłem go z kilkoma zmianami poniżej

Krok 0: Zanim zacznę, zakładam, że masz zainstalowane MySQL, Python i GCC na komputerze Mac.

Krok 1: Pobierz najnowszy adapter MySQL dla Pythona z SourceForge.

Krok 2: Rozpakuj pobrany pakiet:

tar xzvf MySQL-python-1.2.2.tar.gz

Krok 3: Wewnątrz folderu wyczyść pakiet:

sudo python setup.py clean

PARA DODATKOWYCH KROKÓW (z tego komentarza )

Krok 3b: Usuń wszystko z katalogu MySQL-python-1.2.2 / build / * - nie ufaj "python setup.py clean", aby zrobić to za Ciebie

Krok 3c: Usuń jajko w sekcji Users / $ USER / .python-eggs

Krok 4: Początkowo wymagana edycja pliku _mysql.c, ale teraz NIE JEST JUŻ KONIECZNA. Wygląda na to, że społeczność MySQLdb naprawiła teraz ten błąd.

Krok 5: Utwórz łącze symboliczne w bibliotece lib, aby wskazywało podkatalog o nazwie mysql. Właśnie tego szuka podczas kompilacji.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Krok 6: Edytuj plik setup_posix.py i zmień następujące

mysql_config.path = "mysql_config"

do

mysql_config.path = "/ usr / local / mysql / bin / mysql_config"

Krok 7: W tym samym katalogu odbuduj pakiet (zignoruj ​​ostrzeżenia, które się z nim wiążą)

sudo python setup.py build

Krok 8: Zainstaluj pakiet i gotowe.

sudo python setup.py install

Krok 9: Sprawdź, czy działa. Działa, jeśli możesz zaimportować MySQLdb.

python

>>> import MySQLdb

Krok 10: Jeśli podczas próby importu pojawi się błąd informujący, że Library not loaded: libmysqlclient.18.dylibkończy się na: Reason: image not foundmusisz utworzyć jedno dodatkowe łącze symboliczne, które jest:

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

Powinieneś wtedy być w stanie import MySQLdbbez błędów.

Ostatnim problemem jest to, że jeśli uruchomisz Pythona z katalogu kompilacji, otrzymasz ten błąd:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Moduł _mysql został już zaimportowany z /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, ale XXXX / MySQL-python-1.2.3c1 jest dodawany do sys.path

To jest dość łatwe dla Google, ale aby zaoszczędzić ci kłopotów, skończysz tutaj (a może nie ... niezbyt przyszłościowy adres URL) i zorientujesz się, że musiszcd .. wyjść z katalogu kompilacji, a błąd powinien zniknąć.

Jak napisałem na górze, chciałbym, aby ta odpowiedź była uogólniona, ponieważ istnieje wiele innych konkretnych doświadczeń związanych z tym okropnym problemem. Edytuj dalej lub podaj własną, lepszą odpowiedź.

mblackwell8
źródło
1
Zwróć uwagę, że dostarczony przez Apple język Python w wersji 10.6 (Snow Leopard) woli działać w wersji 64-bitowej (jest to uniwersalny 32-bitowy / 64-bitowy). Są też inne pułapki. Przez pewien czas w serii mysql 5.1.x paczki z OS X spakowane przez mysql były wadliwe (twierdzono, że są uniwersalne, ale nie były). Adapter bazy danych dla języka Python, MySQLdb, miał swoje własne problemy. Jest to jeden przypadek, w którym dobrze jest używać MacPorts do automatycznego tworzenia wszystkiego, czego potrzebujesz. Po prostu zbyt łatwo coś pójdzie nie tak.
Ned Deily,
Zostawię to tutaj, na wypadek gdyby komuś to pomogło. Musiałem również zmodyfikować site.cfg, aby ustawić mysql_config na właściwą ścieżkę. Nie sądzę, że początkowo miał ścieżkę, więc domyślnie był to / opt / ..., ale musiałem wskazać go na / usr / local / mysql / ...
tchaymore
8
Musiałem też biec:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill
1
Używam również Lion i miałem ogromne problemy z uruchomieniem tego. W końcu znalazłem to świetne pytanie i odpowiedź SO i podążyłem za nim w 100%. To nie działa na mnie aż dodałem, dokładnie tak, jak zauważył David Underhill powyżej: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Po uruchomieniu tego zaimportowano zgodnie z oczekiwaniami ... w końcu. Wheewwww. Tylko fyi dla tych w podobnej sytuacji.
John the King,
2
Okazuje się, że miałem biblioteki mysql, ale tylko nie zostały poprawnie połączone. Mac OS ElCapitan nie zezwala na linkowanie do / usr / lib. Więc to mi wystarczyło: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
101

Szybki i łatwy sposób na Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) i 10.11 (El Capitan):

Zakładam, że masz zainstalowany XCode, jego narzędzia wiersza poleceń , Python i MySQL.

  1. Zainstaluj PIP:

    sudo easy_install pip
  2. Edytuj ~ / .profile: (może nie być konieczne w systemie Mac OS X 10.10)

    nano ~/.profile

    Skopiuj i wklej następujące dwie linie

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

    Zapisz i wyjdź. Afterwords wykonaj następujące polecenie:

    source  ~/.profile
  3. Zainstaluj MySQLdb

    sudo pip install MySQL-python

    Aby sprawdzić, czy wszystko działa dobrze, po prostu spróbuj

    python -c "import MySQLdb"

Na mnie zadziałało jak urok. Mam nadzieję, że to pomoże.

Jeśli napotkasz błąd dotyczący brakującej biblioteki: Biblioteka nie została załadowana: libmysqlclient.18.dylib , musisz połączyć ją symbolicznie w następujący /usr/libsposób:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
F Lekschas
źródło
2
Dziękuję, to rozwiązanie działa również na Mac OSX 10.9 :-)
matsoftware
2
To działało świetnie dla mnie (publiczna beta Yosemite; Mysql 5; Py2.7), ale musiałem wykonać sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibpolecenie od dołu.
Michael Scott Cuthbert
Dobra odpowiedź. Miałem już inne definicje DYLD_LIBRARY_PATH w swoim .bash_profile, więc dodałem to w ten sposóbexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Właśnie zweryfikowałem, że to działa z 10.10.4. Ponadto, używając mysql z homebrew, zmiana .profile nie była wymagana, aby to zadziałało.
Isotopp,
1
Po zainstalowaniu MySQL z brew install mysql, nie musiałem przechodzić przez drugi krok.
dav.garcia
36

Zainstaluj mysql i python przez Macports Portery wykonali całą trudną pracę.

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

powinieneś zainstalować to, czego potrzebujesz. (zobacz przepełnienie stosu dla komentarzy dotyczących serwera mysql )

Jeśli potrzebujesz tylko połączyć się z mysql i nie uruchomić serwera, wystarczy pierwsza linia.

Macports teraz (początek 2013 r.) Zapewni binarne pliki do pobrania dla typowych kombinacji systemu operacyjnego i architektury wykonywalnej, dla innych (i jeśli o to poprosisz) będzie budować ze źródła.

Ogólnie rzecz biorąc, macports (lub fink) pomaga, gdy istnieją złożone biblioteki itp., Które należy zainstalować.

Tylko kod Pythona i jeśli proste zależności w C można skonfigurować za pomocą setuptools itp., Ale zaczyna się robić skomplikowane, jeśli połączysz te dwa.

mmmmmm
źródło
3
Zauważ, że rozpoczynając korzystanie z MacPorts, upewnij się, że twoja ścieżka preferuje / opt / local / bin nad / usr / bin, ponieważ MacPorts instaluje rzeczy w / opt / local.
Teemu Kurppa,
4
Tak! I pomiń drugą linię, jeśli potrzebujesz tylko połączyć się z istniejącym serwerem MySQL. Niestety, biorąc pod uwagę liczbę powiązanych zależności, próba użycia Pythona z mysql na OS X jest jednym z przypadków, w których łatwiej jest pozwolić MacPorts zainstalować dodatkową instancję Pythona, zamiast próbować samodzielnie grać w menedżera pakietów.
Ned Deily
Na marginesie, jeśli otrzymujesz ostrzeżenie o wycofaniu, następująca strona zawiera poprawkę: bugs.launchpad.net/python-mysqldb/+bug/341943
Jay Taylor
4
FYI, jeśli po prostu wykonasz pierwszą linię (przynajmniej z py27-mysql), i tak zakończy się instalacja mysql5. Pobierając i kompilując źródło. Prawdopodobnie nie to, czego chcesz. Grr.
Ben Hardy,
@BenHardy - instaluje się wszystko, co chcesz i dokładnie to miałem na myśli - również teraz pliki wykonywalne Lion i Snow Leopard są centralnie budowane przez macports, więc w większości przypadków nie wykonają lokalnej kompilacji.
mmmmmm
15

Zainstaluj pip:

sudo easy_install pip

Zainstaluj napar:

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

Zainstaluj mysql:

brew install mysql

Zainstaluj MySQLdb

sudo pip install MySQL-python

Jeśli masz problemy z kompilacją, spróbuj edytować plik ~ / .profile, jak w jednej z odpowiedzi tutaj.

Ron Reiter
źródło
Dzięki! To działało na Sierra [OSX 10.12.6 (16G29)].
Haranadh
curl: (22) Żądany adres URL zwrócił błąd: 404 Not Found
Thirupathi Thangavel
zrobił to, ale pip install mysqlclientzamiast tego. Pracuje!
jeremysprofile
13

Oto kolejny krok, który musiałem przejść po otrzymaniu błędu po wykonaniu kroku 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

Odniesienie: Dzięki! http://ageekstory.blogspot.com/2011_04_01_archive.html

Richard Boardman
źródło
9

Jak stwierdzono na temat instalacji MySQL-python na komputerze Mac :

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

Następnie przetestuj:

python -c "import MySQLdb"
Telmo Dias
źródło
4

Po prostu miałem ten problem (ponownie!) Po otrzymaniu nowego pudełka Lion.

Najlepsze rozwiązanie, jakie znalazłem (nadal nie w 100% optymalne, ale działa):

Państwo może zdobyć, pobierając XCode / Dev Tools od Apple - to duży plik do pobrania -

... ale zamiast tego polecam ten github, który ma to, czego potrzebujesz (i nie ma XCode): https://github.com/kennethreitz/osx-gcc-installer

Pobrałem ich wstępnie skompilowany plik PKG dla lwa, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • upewnij się, że pobrałeś 64-bitową wersję społeczności MYSQL. (Instalacja DMG to łatwa droga) http://dev.mysql.com/downloads/mysql/

  • Ustaw ścieżki w następujący sposób:

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

    eksportuj DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    eksportuj ARCHFLAGS = '- arch x86_64'

UWAGA, ŻE:

1 w mysql-XXXX powyżej, XXX to konkretna pobrana wersja. (Prawdopodobnie / usr / local / mysql / również zadziała, ponieważ najprawdopodobniej jest to alias do tego samego, ale nie będę udawać, że znam twoją konfigurację)

2 Widziałem, że sugerowało to ustawienie ARCHFLAGS na „-arch i386 -arch x86_64”, ale określenie tylko x86_64 wydawało się działać lepiej. (Mogę wymyślić kilka powodów, ale nie są one ściśle istotne).

  • Zainstaluj bestię!

    easy_install MySQL-python

  • OSTATNI KROK:

Trwale dodaj plik DYLD_LIBRARY_PATH!

Możesz dodać go do swojego bash_profile lub podobnego. To był dla mnie brakujący krok, bez którego mój system nadal nalegał na różne błędy znajdowania _mysql.so i tak dalej.

eksportuj DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, właśnie zauważyłem twoje rozwiązanie z miękkim łączem, które może w efekcie robić to samo, co moje rozwiązanie PATH ... ludzie, cokolwiek działa najlepiej dla ciebie.

Najlepsze źródło: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

jsh
źródło
4

Możesz spróbować użyć czystego Pythona pymysql:

sudo easy_install pymysql

(Lub użyj, pipjeśli masz ją zainstalowaną). Następnie dodaj to przed sobą import MySQLdbw kodzie:

try:
    import pymysql
    pymysql.install_as_MySQLdb()
except ImportError:
    pass
Collin Anderson
źródło
3

Lub po prostu spróbuj:

> sudo easy_install MySQL-python

Jeśli daje błąd jak poniżej:

Błąd środowiska: nie znaleziono mysql_config

, a następnie uruchom to

> export PATH=$PATH:/usr/local/mysql/bin
Shashank Agarwal
źródło
0

Jeśli używasz 64-bitowego MySQL, użycie ARCHFLAGS do określenia architektury procesora podczas budowania bibliotek mysql-python załatwi sprawę:

ARCHFLAGS='-arch x86_64' python setup.py build
ARCHFLAGS='-arch x86_64' python setup.py install
Shan Valleru
źródło
0
export PATH=$PATH:/usr/local/mysql/bin/

powinien rozwiązać problem, ponieważ system nie może znaleźć pliku mysql_config.

Varun Bhatia
źródło
0

Na macos Sierra to działa dla mnie, gdzie python jest zarządzany przez anacondę:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

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

Do użycia z SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (domyślnie, 20 grudnia 2016 r., 23:05:08) [Zgodny z GCC 4.2.1 Apple LLVM 6.0 (clang-600.0.57)] na darwin Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji Informacja. Anaconda jest dostarczana przez Continuum Analytics. Sprawdź: http://continuum.io/thanks i https://anaconda.org

>>> z importu sqlalchemy *

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

sAguinaga
źródło
0

Ta odpowiedź to aktualizacja, około listopada 2019 r. Żadna z popularnych instalacji pip nie zapewni działającej konfiguracji w systemie MacOS 10.13 (i prawdopodobnie także innych wersjach). Oto prosty sposób, w jaki wszystko działa:

brew install mysql
pip install mysqlclient

Jeśli potrzebujesz pomocy przy instalacji brew, odwiedź tę stronę: https://brew.sh/

jedzenie
źródło
0

Natknąłem się na ten problem i stwierdziłem, że mysqlclientmusi wiedzieć, gdzie znaleźć openssl, a OSX domyślnie to ukrywa.

Zlokalizuj openssl za pomocą brew info openssl, a następnie dodaj ścieżkę do swojego opensslbin do swojej PATH:

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

Zalecam dodanie tego do twojego .zshrc lub .bashrc, żebyś nie musiał się tym martwić w przyszłości. Następnie, po wyeksportowaniu tej zmiennej (co może spowodować zamknięcie i ponowne otwarcie sesji basha), dodaj jeszcze dwie zmienne env:

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

Na koniec uruchom:

pipenv install mysqlclient

i powinien zainstalować się dobrze.

Źródło: https://medium.com/@shandou/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

Zakład Elliot
źródło