J'essaye de mettre à jour setuptools. En fait, j'essaie de mettre à jour ansible, mais je suis en train d'essayer de mettre à jour setuptools en échouant. Essayer de le faire moi-même échoue également. Même en essayant de désinstaller cela échoue
$ Sudo -H pip install --upgrade setuptools
Collecting setuptools
Using cached setuptools-18.4-py2.py3-none-any.whl
Installing collected packages: setuptools
Found existing installation: setuptools 1.1.6
Uninstalling setuptools-1.1.6:
Exception:
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/basecommand.py", line 211, in main
status = self.run(options, args)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/commands/install.py", line 311, in run
root=options.root_path,
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/req/req_set.py", line 640, in install
requirement.uninstall(auto_confirm=True)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/req/req_install.py", line 716, in uninstall
paths_to_remove.remove(auto_confirm)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/req/req_uninstall.py", line 125, in remove
renames(path, new_path)
File "/Library/Python/2.7/site-packages/pip-7.1.2-py2.7.Egg/pip/utils/__init__.py", line 315, in renames
shutil.move(old, new)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
copytree(src, real_dst, symlinks=True)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
raise Error, errors
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-OyTXsR-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]
Je n'ai pas la moindre idée de ce qui ne va pas. En regardant tous les fichiers dans /System/Library/Frameworks/Python.framework/Versions/2.7/
et au-dessous de chaque fichier appartient à root:wheel
Comment puis-je le réparer?
Cela est dû à la protection de l'intégrité du système introduite dans OS X El Capitan.
Ajouter --user python
à la commande a permis que cela fonctionne.
En d'autres termes
pip install --upgrade setuptools --user python
Le problème est en conflit avec les bibliothèques Python, combinées avec la protection de l'intégrité du système (SIP) sous Mac OS qui protège le système Python.
La meilleure solution à mon avis est de désinstaller et de réinstaller votre propre installation Python et de la conserver séparément des Python fournies par Mac OS qui sont protégées par SIP.
Je préfère cela à la désactivation de SIP comme je l’attend SIP fera partie de toute future version de Mac OS et SIP est pas la cause ici, il expose simplement le problème des bibliothèques en conflit Python.
J'ai également eu ce problème en essayant d'installer ansible.
Mon problème a commencé lorsque j'ai suivi les instructions d’installation ansible pour Mac OS, à savoir installer via pip et installer pip avec easy_install
comme décrit dans Derniers communiqués via Pip
Le problème est lors de l’installation de pip de cette façon, le easy_install
est le Mac OS fourni easy_install
à /usr/bin/easy_install
mais il écrit au easy-install.pth
fichier dans /Library/Python/2.7/site-packages/easy-install.pth
et ce fichier font référence aux bibliothèques fournies par Mac OS Python.
Installation ultérieure avec ansible avec pip install ansible
indique ensuite que l’exigence de setuptools est satisfaite par le Mac OS fourni Python à /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible nécessite setuptools mais ne spécifie pas de version. Un autre paquet dépendant, paramiko, nécessite setuptools> = 11.3, mais cela ne semble pas être vérifié lors de l'installation d'ansible via pip. Lorsque vous essayez d'exécuter ansible, il se plaint que les outils de configuration sont 1.1.6. Ceci est la version de setuptools fournie avec Mac OS. Elle est maintenant protégée par SIP et ne peut donc pas être mise à niveau.
Plutôt que de désactiver SIP, j’ai résolu ce problème en désinstallant mon ordinateur local Python comme indiqué à l’adresse suivante: https://docs.python.org/2.7/using/mac .html # obtenir-et-installer-macpython , puis télécharger et installer à nouveau.
Si vous êtes préoccupé par la société, vous pouvez le faire à la place.
Pour désinstaller j'ai fait
Sudo rm -rf /Library/Python
Sudo rm -rf /Applications/Python\ 2.7/
Sudo rm /usr/local/bin/ansible # executable
Sudo rm /usr/local/bin/python* # symlinks to /Library/Python/2.7
Sudo rm /usr/local/bin/easy_install*
# and so on for references to /Library/Python/2.7 in /usr/local/bin
J'ai ensuite téléchargé le package d'installation 2.7.13 pour Mac OS X à partir de https://www.python.org/downloads/ et je l'ai installé.
Ceci a installé un local python et pip à /Library/Frameworks/Python.framework/Versions/2.7
et liens symboliques dans /usr/local/bin
ainsi que des préfixes /Library/Frameworks/Python.framework/Versions/2.7
à mon $ PATH. Cela permet de tout séparer des bibliothèques fournies par Mac OS à l'adresse /System/Library/Frameworks/Python.framework
et /usr/bin
pour que je reçoive
which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
J'ai ensuite installé ansible avec pip install ansible
Puis quand je cours which ansible
Je reçois
/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible
et en pip list
setuptools (28.8.0)
six (1.10.0)
et ansible fonctionne maintenant pour moi car les bibliothèques Mac OS Python ne sont pas référencées par la nouvelle installation).
Notez qu'en raison du paramètre d'installation $ PATH, which python
est maintenant /Library/Frameworks/Python.framework/Versions/2.7/bin/python
et /usr/local/bin/python
est un lien symbolique vers ceci.
Si vous voulez que le système Python vous devrez utiliser/usr/bin/python ou changer le $ PATH
La réponse est que vous ne pouvez pas mettre à jour setuptools sur OSX pour la fabrique python fourni avec le système d’exploitation. La raison en est que les fichiers de /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
ne peut pas être supprimé ou modifié par l'utilisateur. Non seulement l'utilisateur normal, mais même si vous avez les autorisations root, vous ne pourrez pas modifier ces fichiers.
Bien sûr, vous pouvez utiliser diverses autres méthodes pour installer une version plus récente de setuptools mais cela ne remplacera pas le package système par défaut. Ce qui signifie que si vous allez dans la voie suggérée, le --user python
drapeau, ou vous choisissez de les installer sans racine dans ~/Library
, ils ne remplaceront pas la version des fichiers système.
La raison pour laquelle vous ou root ne parvenez pas à modifier les valeurs par défaut du système est due à SIP dans El Capitan +. Vous pouvez désactiver SIP mais cela n'est généralement pas recommandé .
Au lieu de cela, la seule solution raisonnable consiste à utiliser un python virtualenv.