web-dev-qa-db-fra.com

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

Je suis un débutant en Python, mais je viens de passer une journée à chercher comment faire fonctionner MySQLdb correctement. L’univers de Google contient 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é à traiter 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, donner ma réponse et voir ce qui reste à l’ordre du jour. surface.

La question est donc de savoir comment obtenir MySQLdb travailler sur Mac OS X?

95
mblackwell8

Update pour ceux qui utilisent Python3: Vous pouvez simplement utiliser conda install mysqlclient pour installer les bibliothèques nécessaires à l’utilisation de MySQLdb dans sa version actuelle. La question SO suivante était un indice utile: Python 3 ImportError: aucun module nommé 'ConfigParser' . Installer 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 la voir modifiée ou généralisée si vous avez une meilleure expérience de la question ... 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 que OS X est installé avec une version 32 bits de Python, mais la plupart des joes moyens (moi-même inclus) 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 (paquet ici )

Il existe de nombreuses étapes à suivre 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 vous avez MySQL, Python et GCC installés sur le mac.

Étape 1: Téléchargez le dernier adaptateur MySQL pour Python depuis 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 paquet:

Sudo python setup.py clean

COUPLE DE MARQUES EXTRA, (de ce commentaire )

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

Étape 3c: Supprimez l'oeuf sous Utilisateurs/$ USER/.python-eggs

Étape 4: Éditez à l'origine l'édition _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à que l’on cherche pendant la compilation.

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

Étape 6: Modifiez le fichier setup_posix.py et modifiez les options suivantes.

mysql_config.path = "mysql_config"

à

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

Étape 7: Dans le même répertoire, reconstruisez votre paquet (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 indiquant que Library not loaded: libmysqlclient.18.dylib se terminant par: Reason: image not found, vous devez créer un lien symbolique supplémentaire, à savoir:

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

Vous devriez alors pouvoir import MySQLdb sans erreur.

Un hiccup final 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é à partir de /Library/Python/2.5/ sites-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

Ceci est assez facile pour Google, mais pour vous éviter des ennuis, vous allez vous retrouver ici (ou peut-être pas ... pas une URL particulièrement évolutive) et comprendre que vous devez cd .. sortir du répertoire de construction et 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. Supprimez ou fournissez votre propre réponse.

129
mblackwell8

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 XCode, ses outils en ligne de commande , Python et MySQL installés.

  1. Installer le PIP:

    Sudo easy_install pip
    
  2. Éditez ~/.profile: (cela ne sera peut-être pas nécessaire sous Mac OS X 10.10)}

    nano ~/.profile
    

    Copier et coller les deux lignes suivantes

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

    Sauvegarder et quitter. Les mots suivants exécutent la commande suivante:

    source  ~/.profile
    
  3. Installer MySQLdb

    Sudo pip install MySQL-python
    

    Pour vérifier si tout fonctionne bien, essayez

    python -c "import MySQLdb"
    

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

Si vous rencontrez une erreur concernant une bibliothèque manquante: bibliothèque non chargée: libmysqlclient.18.dylib, vous devez le lier à /usr/lib comme suit:

Sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 
99
F Lekschas

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 Débordement de pile pour les commentaires sur le serveur mysql )

Si vous avez seulement besoin de vous connecter à mysql et de ne pas utiliser de serveur, la première ligne suffit.

Macports maintenant (début 2013) fournira des téléchargements binaires pour les combinaisons courantes d'OS 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 des bibliothèques complexes, etc., doivent être installées.

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

36
Mark

Installer le pip:

Sudo easy_install pip

Installez le brassin:

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

Installez mysql:

brew install mysql

Installer MySQLdb

Sudo pip install MySQL-python

Si vous avez des problèmes de compilation, essayez d’éditer le fichier ~/.profile comme dans l’une des réponses fournies ici.

15
Ron Reiter

Voici une autre étape que je devais passer 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

13
Richard Boardman

Comme indiqué sur Installation de MySQL-python sur mac :

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

Puis testez-le:

python -c "import MySQLdb"
9
Telmo Dias

Je viens d'avoir ce problème (encore!) Après avoir reçu une nouvelle boîte de 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 au lieu de cela, je recommande ce github qui a ce dont vous avez besoin (et n’a pas de code X): https://github.com/kennethreitz/osx-gcc-installer

J'ai téléchargé leur PKG préconfiguré 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 bits de MYSQL Community. (L'installation de DMG est un itinéraire 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 que/usr/local/mysql/fonctionnerait aussi car c'est probablement un alias identique, mais je ne prétends pas connaître votre configuration)

2 J'ai vu qu'il était suggéré de placer ARCHFLAGS sur '-Arch i386 -Arch x86_64', mais spécifier uniquement x86_64 semblait mieux fonctionner pour moi. (Je peux penser à certaines raisons mais elles ne sont pas strictement pertinentes).

  • Installez la bête!

    easy_install MySQL-python

  • DERNIÈRE ÉTAPE:

Ajouter définitivement le DYLD_LIBRARY_PATH! 

Vous pouvez l'ajouter à votre bash_profile ou à un objet similaire . C'était l'étape manquante pour moi, sans laquelle mon système continuait d'insister sur diverses erreurs lors de la recherche de _mysql.so, etc.

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

@ richard-boardman, vous venez de remarquer votre solution Soft Link, qui peut en fait faire la même chose que ma solution PATH ... les gens, tout ce qui vous convient le mieux.

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

4
jsh

Vous pouvez essayer d’utiliser la version pure_python pymysql:

Sudo easy_install pymysql

(Ou utilisez pip si vous l'avez installé.) Ajoutez ensuite ceci avant import MySQLdb dans votre code:

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

Ou essayez simplement:

> Sudo easy_install MySQL-python

Si cela donne une erreur comme ci-dessous:

EnvironmentError: mysql_config introuvable

, lancez simplement ceci 

> export PATH=$PATH:/usr/local/mysql/bin
3
Shashank Agarwal

Si vous utilisez MySQL 64 bits, utiliser ARCHFLAGS pour spécifier votre architecture cpu 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
0
Shan Valleru

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. | (défaut, le 20 décembre 2016, 23:05:08) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] sur darwin Tapez "aide", "copyright", "crédits" ou "licence" pour plus d'informations . Anaconda vous est présenté par Continuum Analytics . S'il vous plaît vérifier: http://continuum.io/thanks et https://anaconda.org

>>> depuis sqlalchemy import *

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

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

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

0
Varun Bhatia