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?
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.
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.
Installer le PIP:
Sudo easy_install pip
É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
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
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.
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.
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
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"
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):
assurez-vous d'avoir le python 64 bits. Comment vérifier si une bibliothèque est construite sur 32 bits/64 bits sur Mac OS X?
installez easy_install si vous ne l'avez pas. _ { http://packages.python.org/distribute/easy_install.html } _
installez GCC si vous ne l'avez pas.
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/
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
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
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
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: // ....')
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.