web-dev-qa-db-fra.com

Mise à niveau de setuptools sur OSX El Capitan

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?

79
gman

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
186
Kof

Vue d'ensemble

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.

Détails

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

2
Jason S

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.

1
I K