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?

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ź.


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 

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.


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.


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



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/


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

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

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

0
export PATH=$PATH:/usr/local/mysql/bin/

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


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: // ....')


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/


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.