Comment installer MySQLdb (bibliothèque d'accès aux données Python sur MySQL) sur Mac OS X?

99

Je suis un débutant en Python, mais je viens de passer une journée à travailler sur comment faire fonctionner MySQLdb correctement, et l'univers selon Google comprend de nombreuses références à ce qu'est un PITA, et un nombre démesuré de guides qui semblent être dépassé. Étant donné que ce site est destiné à résoudre ce type de problèmes et que je sais que je vais avoir besoin d'une référence à la solution à l'avenir, je vais poser la question, fournir ma réponse et voir ce qui flotte d'autre surface.

La question est donc de savoir comment faire fonctionner MySQLdb sur Mac OS X?

mblackwell8
la source

Réponses:

133

Mise à jour pour ceux qui utilisent Python3: Vous pouvez simplement utiliser conda install mysqlclientpour installer les bibliothèques requises pour utiliser MySQLdb tel qu'il existe actuellement. La question SO suivante était un indice utile: Python 3 ImportError: Aucun module nommé «ConfigParser» . L'installation de mysqlclient installera mysqlclient, mysql-connector et llvmdev (au moins, il a installé ces 3 bibliothèques sur ma machine).

Voici le récit de mon expérience décousue avec ce problème. J'adorerais le voir édité ou généralisé si vous avez une meilleure expérience du problème ... appliquez un peu de cette magie SO.

Remarque: les commentaires du paragraphe suivant s'appliquent à Snow Leopard, mais pas à Lion, qui semble nécessiter MySQL 64 bits

Tout d'abord, l'auteur (toujours?) De MySQLdb dit ici que l'un des problèmes les plus pernicieux est qu'OS X est installé avec une version 32 bits de Python, mais la plupart des joes moyens (moi y compris) sautent probablement pour installer la version 64 bits de MySQL. Mauvais mouvement ... supprimez la version 64 bits si vous l'avez installée (les instructions sur cette tâche fastidieuse sont disponibles sur SO ici ), puis téléchargez et installez la version 32 bits (package ici )

Il existe de nombreuses étapes pour créer et installer les bibliothèques MySQLdb. Ils ont souvent des différences subtiles. Cela m'a semblé le plus populaire et a fourni la solution de travail. Je l'ai reproduit avec quelques modifications ci-dessous

Étape 0: Avant de commencer, je suppose que MySQL, Python et GCC sont installés sur le mac.

Étape 1: Téléchargez le dernier adaptateur MySQL pour Python à partir de SourceForge.

Étape 2: Extrayez votre package téléchargé:

tar xzvf MySQL-python-1.2.2.tar.gz

Étape 3: Dans le dossier, nettoyez le package:

sudo python setup.py clean

COUPLE D'ÉTAPES SUPPLÉMENTAIRES, (à partir de ce commentaire )

Étape 3b: supprimez tout ce qui se trouve dans votre répertoire MySQL-python-1.2.2 / build / * - ne faites pas confiance à "python setup.py clean" pour le faire à votre place

Étape 3c: Supprimez l'œuf sous Users / $ USER / .python-eggs

Étape 4: À l'origine, il était nécessaire de modifier _mysql.c, mais n'est plus nécessaire. La communauté MySQLdb semble avoir corrigé ce bogue maintenant.

Étape 5: Créez un lien symbolique sous lib pour pointer vers un sous-répertoire appelé mysql. C'est là qu'il recherche lors de la compilation.

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

Étape 6: Modifiez le fichier setup_posix.py et modifiez ce qui suit

mysql_config.path = "mysql_config"

à

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

Étape 7: Dans le même répertoire, reconstruisez votre package (ignorez les avertissements qui l'accompagnent)

sudo python setup.py build

Étape 8: Installez le package et vous avez terminé.

sudo python setup.py install

Étape 9: Testez si cela fonctionne. Cela fonctionne si vous pouvez importer MySQLdb.

python

>>> import MySQLdb

Étape 10: Si lors de la tentative d'importation, vous recevez une erreur se plaignant que se Library not loaded: libmysqlclient.18.dylibterminant par: Reason: image not foundvous devez créer un lien symbolique supplémentaire qui est:

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

Vous devriez alors pouvoir le faire import MySQLdbsans aucune erreur.

Un dernier problème est que si vous démarrez Python à partir du répertoire de construction, vous obtiendrez cette erreur:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Le module _mysql a déjà été importé de /Library/Python/2.5/ site-packages / MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg / _mysql.pyc, mais XXXX / MySQL-python-1.2.3c1 est ajouté à sys.path

C'est assez facile pour Google, mais pour vous éviter les ennuis, vous vous retrouverez ici (ou peut-être pas ... pas une URL particulièrement à l'épreuve du temps) et comprendrez que vous devez cd ..sortir du répertoire de construction et que l'erreur devrait disparaître.

Comme je l'ai écrit en haut, j'aimerais voir cette réponse généralisée, car il existe de nombreuses autres expériences spécifiques de cet horrible problème. Modifiez ou fournissez votre propre meilleure réponse.

mblackwell8
la source
1
Notez que le Python fourni par Apple sur 10.6 (Snow Leopard) préfère fonctionner en 64 bits (il est universel en 32 bits / 64 bits). Il existe également d'autres écueils. Pendant un certain temps dans la série mysql 5.1.x, les archives tar OS X empaquetées par mysql étaient défectueuses (prétendument universelles mais ne l'étaient pas). L'adaptateur de base de données pour Python, MySQLdb, a eu ses propres problèmes. C'est un cas dans lequel il est conseillé d'utiliser simplement MacPorts pour créer automatiquement tout ce dont vous avez besoin. Il est trop facile pour quelque chose de mal tourner.
Ned Deily
Je vais laisser ça ici au cas où ça aiderait quelqu'un d'autre. J'ai également dû modifier site.cfg pour définir mysql_config sur le bon chemin. Je ne pense pas qu'il y avait un chemin au départ, donc c'était par défaut / opt / ..., mais je devais le pointer vers / usr / local / mysql / ...
tchaymore
8
Je devais aussi courir:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
David Underhill
1
J'utilise aussi Lion et j'ai eu d'énormes problèmes pour que cela fonctionne. J'ai finalement trouvé cette excellente question et réponse SO et je l'ai suivie à 100%. Il ne fonctionne pas pour moi jusqu'à ce que j'ajouté, exactement comme David Underhill mentionné ci - dessus: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib. Une fois que j'ai exécuté ceci, il a importé comme prévu ... enfin. Wheewwww. Juste un fyi pour ceux qui sont dans une position similaire.
John the King
2
Il s'avère que j'avais des bibliothèques mysql mais seulement pas correctement liées. Mac OS ElCapitan ne permet pas de créer des liens vers / usr / lib. Cela me suffisait donc: sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Maruthi
101

Un moyen rapide et facile pour Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite) et 10.11 (El Capitan):

Je suppose que vous avez installé XCode, ses outils de ligne de commande , Python et MySQL.

  1. Installez PIP:

    sudo easy_install pip
  2. Modifier ~ / .profile: (peut ne pas être nécessaire sous Mac OS X 10.10)

    nano ~/.profile

    Copiez et collez les deux lignes suivantes

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

    Sauvegarder et quitter. Afterwords exécutez la commande suivante:

    source  ~/.profile
  3. Installez MySQLdb

    sudo pip install MySQL-python

    Pour tester si tout fonctionne bien, essayez

    python -c "import MySQLdb"

Cela a fonctionné comme un charme pour moi. J'espère que cela aide.

Si vous rencontrez une erreur concernant une bibliothèque manquante: Bibliothèque non chargée: libmysqlclient.18.dylib, vous devez alors créer un lien symbolique /usr/libcomme suit :

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
F Lekschas
la source
2
Merci, cette solution fonctionne également sur Mac OSX 10.9 :-)
matsoftware
2
Cela a très bien fonctionné pour moi (Yosemite public beta; Mysql 5; Py2.7), mais j'avais besoin de faire la sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylibcommande par le bas.
Michael Scott Cuthbert
Bonne réponse. J'avais déjà d'autres définitions de DYLD_LIBRARY_PATH dans mon .bash_profile, alors je l'ai ajouté de cette façonexport DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/
beroe
1
Je viens de vérifier que cela fonctionne avec 10.10.4. De plus, en utilisant mysql de homebrew, le changement de .profile n'était pas nécessaire pour que cela fonctionne.
Isotopp
1
Après avoir installé MySQL avec brew install mysql, je n'ai pas eu à passer par la 2ème étape.
dav.garcia
36

Installez mysql et python via Macports Les porteurs ont fait tout le travail difficile.

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

devrait installer ce dont vous avez besoin. (voir le débordement de pile pour les commentaires sur le serveur mysql )

Si vous avez seulement besoin de vous connecter à mysql et de ne pas exécuter de serveur, la première ligne est suffisante.

Macports maintenant (début 2013) fournira des téléchargements binaires pour les combinaisons courantes de système d'exploitation et d'architecture exécutable, pour d'autres (et si vous le demandez), il sera construit à partir des sources.

En général, macports (ou fink) aide quand il y a des bibliothèques complexes, etc. qui doivent être installées.

Python uniquement code et si de simples dépendances C peuvent être configurées via setuptools, etc., mais cela commence à devenir complexe si vous mélangez les deux.

mmmmmm
la source
3
Notez que lorsque vous commencez à utiliser MacPorts, assurez-vous que votre chemin préfère / opt / local / bin à / usr / bin car MacPorts installe les choses sous / opt / local.
Teemu Kurppa
4
Oui! Et sautez la deuxième ligne si vous avez juste besoin de vous connecter à un serveur MySQL existant. Malheureusement, avec le nombre de dépendances impliquées, essayer d'utiliser python avec mysql sous OS X est un cas où il est plus facile de laisser MacPorts installer une instance python supplémentaire plutôt que d'essayer de jouer au gestionnaire de paquets vous-même.
Ned Deily
En passant, si vous recevez un avertissement de dépréciation, la page suivante contient le correctif: bugs.launchpad.net/python-mysqldb/+bug/341943
Jay Taylor
4
Pour info, si vous faites juste la première ligne (avec py27-mysql au moins), cela finira par installer mysql5 de toute façon. En téléchargeant et en compilant la source. Probablement pas ce que vous voulez. Grr.
Ben Hardy
@BenHardy - tout est installé, c'est ce que vous voulez et exactement ce que je voulais dire - aussi maintenant les exécutables lion et Snow Leopard sont construits de manière centralisée par macports et ne feront donc pas de compilation locale dans la plupart des cas.
mmmmmm
15

Installez pip:

sudo easy_install pip

Installez l'infusion:

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

Installez mysql:

brew install mysql

Installez MySQLdb

sudo pip install MySQL-python

Si vous rencontrez des problèmes de compilation, essayez de modifier le fichier ~ / .profile comme dans l'une des réponses ici.

Ron Reiter
la source
Merci! Cela a fonctionné sur Sierra [OSX 10.12.6 (16G29)].
Haranadh
curl: (22) L'URL demandée a renvoyé l'erreur: 404 Not Found
Thirupathi Thangavel
fait cela mais avec à la pip install mysqlclientplace. Travaux!
jeremysprofile
13

Voici une autre étape que j'ai dû franchir, après avoir reçu une erreur à la fin de l'étape 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

Référence: Merci! http://ageekstory.blogspot.com/2011_04_01_archive.html

Richard Boardman
la source
9

Comme indiqué lors de l' installation de MySQL-python sur mac :

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

Alors testez-le:

python -c "import MySQLdb"
Telmo Dias
la source
4

Je viens d'avoir ce problème (encore!) Après avoir acheté une nouvelle boîte Lion.

Meilleure solution que j'ai trouvée (toujours pas optimale à 100%, mais qui fonctionne):

vous pouvez l' obtenir en téléchargeant XCode / Dev Tools d'Apple - c'est un gros téléchargement -

... mais à la place je recommande ce github qui a ce dont vous avez besoin (et n'a pas de XCode): https://github.com/kennethreitz/osx-gcc-installer

J'ai téléchargé leur PKG prédéfini pour lion, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • assurez-vous d'avoir téléchargé une version 64-BIT de MYSQL Community. (L'installation DMG est un moyen facile) http://dev.mysql.com/downloads/mysql/

  • Définissez les chemins comme suit:

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

    export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

    export ARCHFLAGS = '- arch x86_64'

NOTEZ QUE:

1 dans mysql-XXXX ci-dessus, XXX est la version spécifique que vous avez téléchargée. (Probablement / usr / local / mysql / fonctionnerait également car il s'agit probablement d'un alias du même, mais je ne prétendrai pas connaître votre configuration)

2 J'ai vu qu'il suggérait que ARCHFLAGS soit réglé sur '-arch i386 -arch x86_64' mais spécifier uniquement x86_64 semblait mieux fonctionner pour moi. (Je peux penser à quelques raisons à cela mais elles ne sont pas strictement pertinentes).

  • Installez la bête!

    easy_install MySQL-python

  • DERNIÈRE ÉTAPE:

Ajoutez définitivement le DYLD_LIBRARY_PATH!

Vous pouvez l'ajouter à votre bash_profile ou similaire. C'était l'étape manquante pour moi, sans laquelle mon système a continué à insister sur diverses erreurs trouvant _mysql.so et ainsi de suite.

export DYLD_LIBRARY_PATH = / usr / local / mysql / lib /

@ richard-boardman, vient de remarquer votre solution de lien souple, qui peut en fait faire la même chose que ma solution PATH ... les gens, ce qui fonctionne le mieux pour vous.

Meilleure référence: http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

jsh
la source
4

Vous pouvez essayer d'utiliser le pur-python pymysql:

sudo easy_install pymysql

(Ou utilisez pipsi vous l'avez installé.) Ensuite, ajoutez ceci avant vous import MySQLdbdans votre code:

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

Ou essayez simplement:

> sudo easy_install MySQL-python

Si cela donne une erreur comme ci-dessous:

EnvironmentError: mysql_config introuvable

, alors lancez simplement ceci

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

Si vous utilisez MySQL 64 bits, utiliser ARCHFLAGS pour spécifier l'architecture de votre processeur lors de la construction de bibliothèques mysql-python ferait l'affaire:

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

devrait résoudre le problème pour vous car le système ne parvient pas à trouver le fichier mysql_config.

Varun Bhatia
la source
0

Sur macos Sierra, cela fonctionne pour moi, où python est géré par anaconda:

anaconda search -t conda mysql-python

anaconda show CEFCA/mysql-python

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

Le à utiliser avec SQLAlchemy:

Python 2.7.13 | Continuum Analytics, Inc. | (par défaut, 20 décembre 2016, 23:05:08) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] sur darwin Tapez "help", "copyright", "credits" ou "license" pour en savoir plus information. Anaconda vous est proposé par Continuum Analytics. Veuillez consulter: http://continuum.io/thanks et https://anaconda.org

>>> à partir de l'importation sqlalchemy *

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

sAguinaga
la source
0

Cette réponse est une mise à jour, vers novembre 2019. Aucune des installations pip populaires ne vous donnera une configuration fonctionnelle sur MacOS 10.13 (et probablement d'autres versions également). Voici une façon simple de faire fonctionner les choses:

brew install mysql
pip install mysqlclient

Si vous avez besoin d'aide pour installer brew, consultez ce site: https://brew.sh/

mange de la nourriture
la source
0

J'ai rencontré ce problème et j'ai trouvé qu'il mysqlclientfallait savoir où trouver openssl, et OSX le cache par défaut.

Localisez openssl avec brew info openssl, puis ajoutez le chemin de votre opensslcorbeille à votre PATH:

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

Je recommande de l'ajouter à votre .zshrc ou .bashrc afin que vous n'ayez pas à vous en soucier à l'avenir. Ensuite, avec cette variable exportée (ce qui peut entraîner la fermeture et la réouverture de votre session bash), ajoutez deux autres variables env:

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

Puis, enfin, exécutez:

pipenv install mysqlclient

et il devrait s'installer très bien.

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

Usine d'Elliot
la source