web-dev-qa-db-fra.com

la commande 'cc' a échoué avec le statut de sortie 1 sur OSX High Sierra

J'essaie de courir sur Mac Os High Sierra

pip install MySQL-python

Mais j'obtiens

error: command 'cc' failed with exit status 1

J'ai déjà essayé la solution sur ce sujet , mais cela n'a pas fonctionné.

C'est le message d'erreur complet

The directory '/Users/filipeferminiano/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with Sudo, you may want Sudo's -H flag.
The directory '/Users/filipeferminiano/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with Sudo, you may want Sudo's -H flag.
Collecting MySQL-python
  Downloading https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.Zip (108kB)
    100% |████████████████████████████████| 112kB 289kB/s 
Installing collected packages: MySQL-python
  Running setup.py install for MySQL-python ... error
    Complete output from command /System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-install-8I1X5u/MySQL-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/tmp/pip-record-z5HohX/install-record.txt --single-version-externally-managed --compile:
    running install
    running build
    running build_py
    creating build
    creating build/lib.macosx-10.13-intel-2.7
    copying _mysql_exceptions.py -> build/lib.macosx-10.13-intel-2.7
    creating build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/__init__.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/converters.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/connections.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/cursors.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/release.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    copying MySQLdb/times.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb
    creating build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/__init__.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/CR.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/ER.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/FLAG.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/REFRESH.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    copying MySQLdb/constants/CLIENT.py -> build/lib.macosx-10.13-intel-2.7/MySQLdb/constants
    running build_ext
    building '_mysql' extension
    creating build/temp.macosx-10.13-intel-2.7
    cc -fno-strict-aliasing -fno-common -dynamic -Arch x86_64 -Arch i386 -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -Arch i386 -Arch x86_64 -pipe -Dversion_info=(1,2,5,'final',1) -D__version__=1.2.5 -I/usr/local/Cellar/mysql/8.0.11/include/mysql -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c _mysql.c -o build/temp.macosx-10.13-intel-2.7/_mysql.o
    _mysql.c:44:10: fatal error: 'my_config.h' file not found
    #include "my_config.h"
             ^~~~~~~~~~~~~
    1 error generated.
    error: command 'cc' failed with exit status 1

    ----------------------------------------
Command "/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python -u -c "import setuptools, tokenize;__file__='/private/tmp/pip-install-8I1X5u/MySQL-python/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /private/tmp/pip-record-z5HohX/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/tmp/pip-install-8I1X5u/MySQL-python/

C'est le python

which python
/usr/bin/python

et c'est le pip que j'utilise

which pip
/usr/local/bin/pip
4
Filipe Ferminiano

la réponse d'abamert n'a pas fonctionné pour moi. Bien que cela soit le cas, vous pouvez essayer de sauter la première étape,

brew install mysql-connector-c
brew install mysql
brew link --overwrite mysql
pip install MySQL-python
1
Optimus Prime

Tout d’abord, êtes-vous sûr de vouloir utiliser MySQL-python ? Il s’agit d’un projet pratiquement mort qui a été semi-maintenu pour la prise en charge de l’héritage au cours des cinq dernières années et ne fonctionne même pas avec les versions actuelles de MySQL. Il veut 5.0 ou peut-être 5.1; la version actuelle est 8.0 et même la version actuelle est 5.7.


Les autres options incluent:

  • mysql-connector , alias MySQLConnector/Python: Il s'agit de la bibliothèque officiellement prise en charge, à partir de MySQL/Oracle. Cela peut être un peu lent, ce qui n’a aucune importance pour la plupart des projets, mais cela peut parfois arriver. Elle a également une API différente (bien que, si vous vous en tenez aux méthodes de DB-API 2, la seule différence est l'appel de connexion; au-delà, il devrait s'agir uniquement d'éléments de bas niveau qui sont différents).
  • mysqlclient : Ceci est le paquet que Django et certains autres frameworks utilisent. C'est une fourchette mise à jour de MySQL-Python (avec quelques éléments de son successeur abandonné, moist). Il peut même être configuré pour s’installer lui-même sous le nom MySQLdb, du même nom que celui utilisé par MySQL-python.
  • PyMySQL : package tiers conçu pour être aussi compatible que possible avec l'ancien MySQL-python, mais plus simple et plus facile à gérer et à installer.
  • cmysql , une fourchette de PyMySQL qui n'est que légèrement plus difficile à installer, mais qui devrait être plus rapide que celle-ci, ou que mysql-connector.

Certaines distributions Linux, y compris IIRC et les versions récentes d'Ubuntu, fournissent un paquet nommé python-MySQLdb ou similaire qui n'est pas réellement MySQL-python, mais plutôt mysqlclient construit avec l'option install-as-MySQLdb. Donc, si la seule raison pour laquelle vous essayez d’utiliser MySQL-python est que c’est ce que vous utilisiez sur une boîte Ubuntu, c’est probablement pas ce que vous utilisiez, et donc pas ce que vous voulez.

Certaines de ces alternatives requièrent également MySQL (en particulier MySQLConnector/C, également appelé libmysqlclient et ses bibliothèques de développement), d'autres non, mais elles sont toutes compatibles avec les versions actuelles. (Bien qu'il y ait quelques notes sur les changements de chiffrement 8.0 dans les documents pour PyMySQL et cmysql, que vous voudrez peut-être lire si vous utilisez 8.0.)


Quoi qu'il en soit, si vous voulez vraiment MySQL-python, vous devrez installer MySQL dans une version 5.x. La INSTALL vous dirige vers Téléchargements MySQL .

Si vous souhaitez utiliser la version 5.0 ou 5.1, vous devrez parcourir le dossier Downloads de l'un des miroirs pour trouver un paquet source et suivre les instructions pour le construire et l'installer, car aucun programme d'installation binaire ne fonctionne sur les Mac actuels.

Si vous voulez des versions 5.x ultérieures, qui, rappelez-vous, ne sont pas prises en charge par MySQL-python, mais qu'elles peuvent fonctionner, Oracle fournit toujours des programmes d'installation binaires Mac pour celles-ci. Si vous ne les trouvez pas dans la section principale des téléchargements, le dossier Téléchargements des miroirs les aura. À l'heure actuelle, les versions 5.6 et 5.7 ont des packages d'installation binaires se terminant par -macos10.13-x86_64.dmg.

Cependant, vous serez peut-être plus heureux de l’installer avec Homebrew . Suivez les instructions sur cette page pour installer brew, puis pour l’utiliser pour:

brew install [email protected]

MySQL-python also nécessite des bibliothèques OpenSSL, et Apple cache délibérément celles utilisées par le système d'exploitation pour empêcher les personnes de construire accidentellement du code par rapport à une ancienne version et de ne pas obtenir de mises à jour de sécurité. Les nouvelles bibliothèques devraient toutes savoir comment gérer cela, mais pas MySQL-python. Le moyen le plus simple d’installer un OpenSSL utilisable est de nouveau avec Homebrew: 

brew install openssl

Mais ne lancez pas cette commande et ne fermez pas la fenêtre. Lisez le résultat, car vous devez faire tout ce que vous dites si vous voulez que MySQL-python soit construit.

7
abarnert

Mon problème était que j'utilisais MySQL Version 8.0.12. Dès que je suis passé à MySQL 5.7, il était parfaitement installé. J'ai utilisé ce qui suit pour supprimer la version 8: https://Gist.github.com/vitorbritto/0555879fe4414d18569d

L'essentiel de ce qui précède était:

  1. Recherchez les processus MySQL avec: ps -ax | grep mysql
  2. Arrêtez et tuez tous les processus MySQL
  3. brasser enlever mysql
  4. nettoyage de la bière
  5. launchctl unload -w ~/Bibliothèque/LaunchAgents/homebrew.mxcl.mysql.plist
  6. Sudo rm/usr/local/mysql
  7. Sudo rm -rf/usr/local/var/mysql
  8. Sudo rm -rf/usr/local/mysql *
  9. Sudo rm ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
  10. Sudo rm -rf/Bibliothèque/StartupItems/MySQLCOM
  11. Sudo rm -rf/Bibliothèque/PreferencePanes/My *
  12. rm -rf ~/Bibliothèque/PreferencePanes/My *
  13. Sudo rm -rf/Bibliothèque/Receipts/mysql *
  14. Sudo rm -rf/Bibliothèque/Receipts/MySQL *
  15. Sudo rm -rf/private/var/db/receipts/mysql
  16. Redémarrez votre ordinateur pour vous assurer que tous les processus MySQL sont supprimés
  17. installer mysql en utilisant brew: brew installer [email protected]
  18. Enfin, pip installer mysql-python
0
Ashwin_Mathew