Comment utiliser pip après la mise à niveau vers OS X El Capitan?

116

Après la mise à jour El Capitan, je suis incapable d'exécuter l'installation pip. L'erreur que je reçois est que "l'opération n'est pas autorisée" lorsque pip tente de créer de nouveaux dossiers lors de l'installation.

creating /System/Library/Frameworks/Python.framework/Versions/2.7/share
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted

En fait, en général, je ne peux pas créer de dossiers, etc. dans ces dossiers. J'ai essayé d'utiliser sudo sans succès. Aussi j'ai fait

sudo chflags nouchg /System/Library/Frameworks/Python.framework/Versions/2.7/

Ce qui précède n'a pas aidé non plus. Que puis-je faire pour pouvoir installer à nouveau les bibliothèques python sans problème?

web_ninja
la source
1
Où est pip sur votre système?
user151019
$ où pip / usr / local / bin / pip
web_ninja
$ pip --version pip 7.1.2 à partir de /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)
web_ninja
Comment avez-vous installé pip - il devrait écrire dans /Library/Python/2.7/site-packages not / System
user151019
Je ne me souviens plus maintenant. Après avoir posté le commentaire, j’ai pensé que c’était le problème et que nous utilisions Brew pour installer Python, ce qui corrigeait l’emplacement de pip.
web_ninja

Réponses:

84

Une solution rapide est d'utiliser homebrew pour installer pythonen /usr/local/binsorte que votre pippeut fonctionner sur un cadre de python-modifiable par l' utilisateur.

brew install python
pip --version

La désactivation de la protection de l’intégrité du système est également une option, mais je ne le recommande pas pour des serveurs gérés par des professionnels et dotés de parois coupe-feu où vous avez la main-d’œuvre pour gérer la détection des intrusions ou si vous êtes un développeur / sysadmin et devez tester des éléments avec et sans. SIROTER.

ls -lO /System/Library/Frameworks/Python.framework/Versions/2.7/
csrutil status

Vous verrez que le drapeau restreint est défini et ne peut pas être supprimé même en tant que root tant que SIP est activé.

L'utilisation de homebrew permet de gérer pip et python séparément de la version fournie par le système. En prime, le framework homebrew est conçu pour faciliter la maintenance et les correctifs / tâches via l'automatisation.

bmike
la source
1
Le brassage de python installé n’est pas stable et se bloque de manière aléatoire.
jayatubi
@jayatubi Quel paquet ou script est instable pour vous? Êtes-vous en train d’installer python 2.7.10 à partir de brew ou le python3 qui vient de connaître un problème majeur et qui est connu pour ne pas être aussi rétro-compatible. Vous pouvez choisir parmi des dizaines de versions si vous préférez une version plus ou moins stable pour vos besoins.
bmike
1
Convenez que brew install pythonc’est l’option la plus simple, bien que le nettoyage d’une autre configuration puisse être nécessaire si vous utilisez le système Python depuis un certain temps (par exemple, les fichiers Python appartenant à un utilisateur racine /usr/local/binet ~/Library/Caches/pip).
RichVel
Le téléchargement d'un fichier python .pkg compilé, par exemple à partir de python.org/downloads/release/python-2712 , me convient très bien, le 10.8. Des commentaires à ce sujet contre homebrew? Merci
Denis
@denis me plait, brewcar il est facile d'épingler une version que vous aimez - gérez plusieurs versions différentes ou maintenez les éléments à jour régulièrement. Si vous avez quelque chose qui fonctionne pour vous, cependant - il est difficile de dire que vous devriez changer quelque chose.
bmike
77

Une autre option viable sans qu'il soit nécessaire de désactiver SIP ou d'installer d'autres versions de Python consiste à installer les modules uniquement pour l'utilisateur actuel à l'aide de

pip install --user <modulename>

S'il ne s'agit que de votre machine personnelle, ce serait la solution la plus simple et la plus sûre.

Michal Příhoda
la source
1
El Capitan a peut-être fourni / usr / bin / pip, mais pas macOS Sierra.
sigjuice
1
Fonctionne sur sierra
harryparkdotio
57

Ce problème se pose souvent lorsque pip tente d'installer une page de manuel pour IPython sur El Capitan. La solution rapide consiste à utiliser une commande pip comme ceci:

sudo -H pip install --install-option '--install-data=/usr/local' <package>

Cependant, la protection de l'intégrité du système (SIP) sur El Capitan bloque plusieurs mauvaises pratiques avec pip qui glissait auparavant. Vous devrez donc probablement apporter quelques modifications supplémentaires pour que pip fonctionne correctement avec El Capitan.

SIP sur El Capitan expose trois problèmes d'utilisation de pip avec la version de Python fournie par Apple sur OS X:

  1. distutils ne définit pas correctement deux variables importantes sur les Mac, aussi pip tente-t-il d'écrire des en-têtes et d'autres fichiers partagés (par exemple, des pages de manuel) sous /System/Library/Frameworks/Python.framework/Versions/2.7/. C'est une mauvaise idée, mais dans les versions précédentes d'OS X, cela réussissait si pip était exécuté avec sudo. Cependant, il échoue sur El Capitan en raison de SIP. C'est l'erreur que vous avez rencontrée. Il donne des messages commeOSError: [Errno: 1] Operation not permitted: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

  2. Apple installe des versions obsolètes de certains packages /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/(par exemple, six). Sur les versions précédentes d’OS X, lorsque vous installiez un package nécessitant une version plus récente de l’une d’elles, sudo pipsupprimait silencieusement l’ancienne version du /System/dossier et installait une version plus récente dans /Library/Python/2.7/site-packages. C'était également une mauvaise idée et n'est plus possible avec SIP. Mais maintenant, pip va planter avec un message d'erreur en essayant de supprimer l'ancien paquet. Ce message est aussi OSError: [Errno: 1], mais il vient après un message comme Uninstalling six-1.4.1:. Voir, par exemple, https://github.com/pypa/pip/issues/3165 .

  3. La version Apple de Python ajoute plusieurs répertoires sous /System/Library/Frameworks/Python.framework/Versions/2.7/le chemin de recherche python, au - dessus des emplacements d'installation de packages standard accessibles aux utilisateurs. Donc, si vous installez une version plus récente d'un paquet ailleurs (par exemple, sudo -H pip install --ignore-installed six), vous recevrez un message indiquant que l'installation a réussi, mais ensuite, lorsque vous exécutez python, vous obtiendrez l'ancienne version /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/. Cela rend également impossible l'utilisation de nouveaux packages portant le même nom que les modules de la bibliothèque standard.

Vous pouvez contourner ces problèmes, mais la méthode dépend de vos réponses à trois questions.

  1. Voulez-vous continuer à utiliser la version Mac OS X de Python ou installer la vôtre? L'installation de votre propre est l'option la plus sûre, et peut être effectuée via l'installateur officiel de Python, Homebrew ou Anaconda. C'est également ce que recommande Apple , comme l'a souligné @Sacrilicious . Si vous installez votre propre version de Python, vous devriez probablement désinstaller tout ce qui est actuellement installé /Library/Python/2.7/site-packageset tous les scripts installés /usr/local/binpour ces packages (y compris pip). Sinon, certains scripts accèderont à la version de Python installée par le système et certains accéderont à votre propre installation.

Si vous souhaitez vous en tenir à Python installé par le système, vous devez prendre deux autres décisions:

  1. Voulez-vous installer des packages pour tous les utilisateurs ou juste pour vous-même? L'installation pour tous les utilisateurs garantit que chaque programme utilisant Python (y compris éventuellement des scripts administratifs) aura accès à tous les packages que vous installez. Cependant, il y a une chance lointaine que cela interfère avec l'utilisation de Python par El Capitan. (J'espère que Apple utilise python -Spour obtenir les packages auxquels ils s'attendent, mais je n'ai aucun moyen de le vérifier.) L'installation pour votre propre compte utilisateur élimine la possibilité d'interférer avec l'installation Python du système. Remarque: si vous envisagez de passer d'une installation système à une installation utilisateur, vous devriez probablement saisir cette occasion pour désinstaller tout élément actuellement installé /Library/Python/2.7/site-packageset les scripts associés dans /usr/local/bin.

  2. Souhaitez-vous masquer les packages supplémentaires installés avec la version OS X de Python (sous /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/) ou les conserver dans le chemin de recherche? Je recommande de les masquer afin que les versions les plus récentes de ces packages soient automatiquement installées dans des emplacements accessibles à l'utilisateur en cas de besoin. Si vous ne masquez pas ce répertoire, vous recevrez parfois des messages indiquant que pip n'a pas pu supprimer un package existant afin de le mettre à niveau vers une version ultérieure (nécessaire pour un autre package que vous installez). Dans ce cas, vous devrez exécuter la procédure pour pip install --ignore-installed <package>installer la version la plus récente et masquer la version installée sur le système. Cependant, si vous cachez le tout/System/.../Extras/...répertoire, vous perdrez l’accès à certains packages Apple qui ne sont pas disponibles via pip, c’est-à-dire CoreGraphics et bonjour. (Si vous en avez besoin, vous pourrez peut-être y accéder en les liant à votre répertoire site-packages.)

Maintenant, voici les solutions de contournement. Cela serait une bonne pratique sur toutes les versions d’OS X, afin d’éviter de remplacer ou de supprimer accidentellement les packages Python utilisés par le système d’exploitation; Cependant, ils sont essentiels si vous souhaitez utiliser des packages installés par l'utilisateur avec la version de Python fournie par Apple sur OS X El Capitan (10.11).

Installer pip

Vous l'avez probablement déjà fait, mais sinon, vous pouvez utiliser la commande suivante pour installer pip pour tous les utilisateurs :

sudo -H easy_install pip
# pip script will be installed in /usr/local/bin

Ou utilisez cette commande pour installer pip pour votre propre compte utilisateur uniquement :

easy_install --user pip
# pip script will be installed in ~/Library/Python/2.7/bin

Gérer les emplacements de fichiers partagés

Si vous installez des packages pour tous les utilisateurs, créez un fichier appelé .pydistutils.cfg avec ces lignes (à partir de https://github.com/pypa/pip/issues/426 ):

[install]
install-data=/usr/local
install-headers=/usr/local

Si vous utilisez habituellement sudo -H pip ..., alors vous devriez mettre ce fichier dans /var/root(répertoire de base pour l'utilisateur root). Si vous utilisez habituellement sudo pip ..., alors vous devriez mettre ce fichier dans votre propre répertoire personnel (~).

Ces paramètres empêcheront pip d'essayer d'écrire des éléments partagés tels que les en-têtes et les pages de manuel sous /Library/System. (La commande en haut de cette réponse est une version plus rapide de la même chose.) Ces paramètres sont nécessaires car le code spécifique à darwin /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/install.pyne parvient pas à définir ces variables sur des emplacements accessibles en écriture à la racine (bien qu'il définisse correctement les autres variables). Pour plus d'informations à ce sujet, rendez-vous sur https://github.com/pypa/pip/issues/3177 .

Si vous installez des packages uniquement pour votre propre compte utilisateur, les éléments partagés seront automatiquement installés sous ~/Library/Python/2.7/. Mais vous devriez ajouter les lignes suivantes à votre ~ / .profile pour que les éléments partagés soient trouvés lorsque vous en aurez besoin:

export PATH=~/Library/Python/2.7/bin:$PATH
export MANPATH=~/Library/Python/2.7/share/man:$MANPATH

Remarque: vous devrez démarrer un nouveau shell ou les exécuter sur la ligne de commande pour que les modifications prennent effet. Vous pouvez également vouloir exécuter hash -rsi vous avez récemment supprimé les anciens scripts du chemin.

Gérer le chemin Python

Vous devez vous assurer que les packages que vous installez sont plus élevés dans l'ordre de recherche de Python que les packages installés par le système. La façon la plus simple de procéder consiste à utiliser des .pthfichiers. Ceci suit la suggestion de @ Sacrilicious ailleurs sur cette page , mais garantit que votre répertoire sites-packages utilisateur est recherché avant votre répertoire site-packages, et les deux avant la bibliothèque standard et le répertoire Extras d’Apple (tous deux sous / System /. ..). Il omet également /System/.../Extrasle chemin de recherche si vous le souhaitez.

Créez un fichier appelé fix_mac_path.pth, avec le texte ci-dessous. Si vous installez des packages pour tous les utilisateurs, fix_mac_path.pth vous devez les placer dans /Library/Python/2.7/site-packages. Si vous installez uniquement pour votre propre utilisateur, vous fix_mac_path.pth devriez être dans ~ / Library / Python / 2.7 / lib / python / site-packages. (Ce fichier peut avoir le nom de votre choix, mais il doit être placé dans un ou deux de ces emplacements et se terminer par .pth; tout le texte de ce fichier doit également figurer sur une seule ligne.)

Si vous souhaitez masquer les packages installés par Apple dans /System/.../Extras:

Commencez par l’une des commandes suivantes pour obtenir une copie de travail de pip / setuptools indépendamment de la version fournie par Apple:

pip install --ignore-installed --user setuptools   # your account only
# or
sudo -H pip install --ignore-installed setuptools  # all users

Ensuite, insérez le code suivant fix_mac_path.pthà l'emplacement spécifié ci-dessus:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/') and not '/Extras/' in p]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Si vous souhaitez continuer à utiliser les packages installés par Apple, vous n'avez pas besoin d'installer une autre copie de setuptools. Il suffit de mettre le code suivant fix_mac_path.pthà l'emplacement spécifié ci-dessus:

import sys; std_paths=[p for p in sys.path if p.startswith('/System/')]; sys.path=[p for p in sys.path if not p.startswith('/System/')]+std_paths

Après cela, vous pouvez vous python -m siteassurer que l’ordre de recherche du chemin a du sens.

Installer des paquets

Après cela, vous devriez pouvoir installer de nouveaux packages en utilisant l’une des commandes suivantes.

Pour tous les utilisateurs:

sudo -H pip install <package>

Pour votre propre utilisateur:

pip install --user <package>
Matthias Fripp
la source
Des instructions très claires avec des alternatives énoncées. J'ai suivi ce guide et j'ai réussi à résoudre le problème des "six" bibliothèques, ce qui m'a permis d'installer mitmproxy.
Paul Chernoch
1
C’est vraiment l’une des réponses les plus informatives, complètes et utiles que j’ai jamais rencontrées sur stackoverflow. Bravo et merci.
cmsjr
@cmsjr, merci! Il m'a fallu un certain temps pour comprendre ce qui se passait, et cela me donne un bon endroit pour y revenir!
Matthias Fripp
4
De loin l'explication la plus claire et la plus complète que j'ai vue de cette zone, en particulier le nettoyage du désordre Python du système existant - merci! Mon amélioration principale serait de recommander plus fortement d’utiliser un Python installé par brassage, car cela est très facile et offre une configuration propre qui ne nécessite pas de sudo. Cela s'ajoute à virtualenvs pour les projets de développement.
RichVel
Quel désastre. Dieu te bénisse.
Matt M. le
31

Premièrement, vous ne désactivez pas SIP pour résoudre le problème. Désolé, c'est la raison pour laquelle la création de ce dossier échoue, mais nous devons contourner le problème. Deuxièmement, vous perdez toutes les subtilités que Apple pensait vous donner, comme un pont via pyObjC, lorsque vous installez votre propre Python.
(J'admets, ils disent que vous devriez installer le vôtre /usr/localsi vous êtes développeur, je m'oppose juste à ce qu'il soit facile avec brew.)

Logiquement, vous pourriez penser à l'installer dans un endroit où SIP ne vous bloque pas, et c'est presque certainement une solution que le pépin de dépendance résout pour vous. Indiquer à pip où vous voulez qu'il effectue des installations n'est pas une solution, mais bien de le laisser ignorer les éléments préexistants dans / System, où il vérifie les dépendances de nombreuses installations courantes nécessitant, par exemple six, et SIP provoque pip se casser quand il va essayer de le mettre à jour. C'est le comportement par défaut de pip à installer dans /Library/Python/2.7/site-packages, il vous suffit de dire --ignore-installedde le forcer à installer toutes les versions mises à jour des dépendances.
... Malheureusement, vous pouvez ensuite importer ce module dans une session interactive ou dans un script et obtenir de gros échecs - il regarde toujours le paquet / System non mis à jour!

Depuis les premiers jours de setuptools, Python dispose d’un moyen de rendre cette recherche explicite. C'est un peu bizarre (et devrait provoquer une pause pour ceux d'entre nous qui sommes conscients de la sécurité et qui ne sont pas ravis de la brutalité de la placer en tête de liste sans vérifier, mais) vous pouvez placer un fichier qui se termine par .pth( par exemple, 'elcap.pth') /Library/Python/2.7/site-packagespour placer ce répertoire au début de l'ordre de recherche avec le contenu suivant:
import sys; sys.path = ['/Library/Python/2.7/site-packages'] + sys.path

Commencez une nouvelle session et un rapide voyage vous python -m siteconfirmera que vous avez inséré ce chemin dans le premier emplacement, et l'importation de modules devrait fonctionner.

Oh, et après tout cela, essayez simplement d'installer avec l' --useroption pip ou d'utiliser un serveur virtuel - c'est de toute façon la meilleure pratique pour la plupart des gens.

Sacrilicieux
la source
1
Maintenant, ceci est élégant et un bon contrepoint à ma solution simpliste "abandonner le système Python et le préparer". Si vous avez besoin de rapide et de sale, cela ne vaut peut-être pas la peine, mais garder pyObjC et un python a un grand mérite.
bmike
2
Plus pythonique et judicieux serait d'installer --userou d'utiliser un virtualenv. En tant qu'administrateur système, je pense simplement que vous installez une fois pour un système et que l'utilisateur doit pouvoir remplacer le système. Les objections à cette solution peuvent être que le système examine un chemin modifié, mais il existe un précédent selon lequel easy_install peut également écrire un fichier .pth.
Sacrilicious
2
Je ne sais pas si le moyen utilisé pour brasser est le moyen facile / mauvais. Il s’agit de résoudre des problèmes, et brasser résout mes problèmes de façon spectaculaire - penser seul à l’effort que cela prendrait pour jouer avec les nouveaux jouets (ruby 2.2 .3, python3.5, MongoDB, Node4.2.1) de façon pratique, comme taper une commande et le recompiler, le mettre à jour et supprimer le thrash - bon, alors je prends le chemin facile alors :) Je ne sais pas ce que la version de Python pour OS X livrée est si différente du support Cocoa and Threads et de nombreux paquets que je n’avais jamais utilisés auparavant et j’ai en effet compilé ma pile de fichiers Xcode / Kernel
PJJ du
J'ai ajouté elcap.pth à /Library/Python/2.7/site-packages, je vois maintenant ce chemin répertorié dans les index 0 et 2 de sys.path. Alors j'ai essayé sudo pip install --ignore-installed ipythonet il fonctionne jusqu'à ce que « Running setup.py install pour pexpect », au cours de laquelle pip point encore essaie de mettre à jour quelque chose dans /System/Library/Frameworks/Python.framework/Versions/2.7/share et des erreurs liées.
Kojiro
L'installation de virtualenv nécessite l'utilisation de pip, de sorte que cela ne résout pas vraiment les problèmes liés à l'utilisation de pip. En l'état, je l'installe avec pip --useret virtualenv ne fonctionne toujours pas.
user5359531
4

Je pense que cela est dû au SIP ou à la protection de l'intégrité du système , une sorte de protection de fichier en temps réel qui ressemble à un antivirus Windows :) et qui empêche toute modification que vous souhaitez apporter aux dossiers système OS X. Apple a simplement décidé de désactiver les modifications du système - pour vous assurer que vous êtes pleinement protégé contre le mal d’Internet et contre les autres forces pervers liées à l’informatique, contre lesquelles SIP nous protège.

Si vous souhaitez désactiver SIP, vous devez démarrer Recovery HD en maintenant les touches Commande + R simultanément lorsque vous démarrez votre Mac.

Ouvrez le terminal à partir du menu Utilitaires, tapez-le csrutil disable, puis appuyez sur Retour. Allez au menu Apple pour redémarrer.

SIP serait désactivé à partir de maintenant. Je l'ai désactivé il y a longtemps et je n'ai rien remarqué de mal, certains processus semblent se plaindre, mais ils le font toujours sous OS X, donc je ne suis pas sûr que cela soit causé par le manque de «protection» de l'intégrité du système.

Mon conseil est de vous débarrasser complètement de SIP et / ou d’utiliser homebrew pour l’ensemble de vos logiciels opensource / de développement. Homebrew utilise le répertoire / usr / local pour sa mise en place et ne se heurte pas à d'autres composants du système. Les versions homebrew sont plus à jour que les versions OS x apple.

PJJ
la source
1
Cela n'a aucun sens de voter à la baisse cette réponse. Mais peut-être que quelqu'un est juste grincheux? +1 de moi ...
bmike
1
Merci mon pote! Essayé de mettre un peu d'humour, mais tout le monde ne doit pas être conforme à ma compréhension;)
PJJ
Hmm - après avoir lu la réponse de sacrilicious , je ne suis pas sûr que ce soit SIP. Pensées?
bmike
1
C’est effectivement SIP qui empêche la création d’un dossier (éventuellement pour une page de manuel par exemple) en tant que sous-répertoire de /System; hors limites à partir de 10.11. Nous pouvons utiliser csrutil pour le désactiver temporairement si nous sommes coincés, bien que je sache que cela pourrait donner l’impression que cela pourrait se transformer en whack-a-mole, mais cela ne semble pas être une bonne raison de l’employer. La laisser est… pourquoi nous ne pouvons pas avoir de belles choses.
Sacrilicious
Je l'ai eu tout le temps: statusSystem Integrity Protection status: enabled (Custom Configuration). Configuration: Apple Internal: disabled Kext Signing: disabled Filesystem Protections: disabled Debugging Restrictions: disabled DTrace Restrictions: disabled NVRAM Protections: disabled et je n'ai aucune raison de l'activer, mon système étant plutôt étanche, personnalisé et personnalisé
PJJ
4

Utilisé à la pip3 install <package>place et résolu le problème de permission dans pip.

Keng
la source
4

Croyez-moi, vous ne voulez pas vraiment que la bibliothèque écrive quoi que ce soit sur ce chemin.

Il était auparavant déconseillé, mais il était possible d'écrire /System/Library/Frameworks/Python.framework/Versions/2.7/dessus, mais maintenant, il n'est pas pris en charge en raison d'Apple SIP. C'est donc le problème du propriétaire de la bibliothèque. La distribution du package doit être mise à niveau pour fonctionner correctement avec cette mise à jour. La plupart des packages ont été mis à jour et y ont installé leur contenu /Library/Python/2.7/site-packages, mais certains packages n'ont pas été mis à jour.

Dans mon cas, c’était une bibliothèque de greenlet qui essayait d’écrire son .hfichier dans le dossier System Frameworks:

Comment y remédier: sudo -H pip install greenlet --install-option "--install-headers=/Library/Python/2.7/lib/python/includes/" alorssudo -H pip install gevent

Pour numpy, le correctif est sudo -H pip install --ignore-installed -U numpy.

Pour les autres bibliothèques, les correctifs varient de https://github.com/pypa/pip/issues/3177 à pip install --ignore-installed sixet pip install --user(le dernier installe tout dans /User//Library/Python/2.7/ path). Voir aussi la réponse actuelle la plus récente à ce message: https://apple.stackexchange.com/a/210021/169157

Si vous tapez python -m sitecela devrait inclure sys.path = [ ... '/Library/Python/2.7/site-packages', ... ] avant les chemins système - c’est pourquoi (et comment) cela fonctionne.

Yuri Baburov
la source
3

Je l'ai fait comme suit:

brew install python

puis après l'installation de python:

sudo easy_install pip
motionpotion
la source
3
brew install pythoninstalle déjà pip avec elle. Si vous installez ensuite pip via easy_install, vous vous retrouverez probablement avec deux installations de pip pouvant être source de problèmes.
NSSynapse
3

Une solution très intéressante pour ce problème consiste à utiliser virtualenv (virtualenvwrapper). Après avoir créé un nouvel environnement pour votre projet, vous pouvez utiliser pip sans problèmes. J'ai donc utilisé virtualenvwrapper et ces deux lignes permettent de résoudre le problème:

mkproject <project_name>
pip install <package_name>
Neosergio
la source
Comment recommandez-vous l'installation de virtualenv? pip install virtualenvou pip ne fonctionne pas et vous devez utiliser sudo easy_install+1 pour ce qui est déjà là. Cheers
bmike
1
pip ne fonctionne pas à cause des autorisations, donc sudo easy_installfonctionne
neosergio
2

J'ai python3 installé sur mon mac alors que le python2.7 original est livré avec OSX. Donc, chaque fois que je veux invoquer python3, je tape simplement $ python3 ... Peut-être devriez-vous essayer $ python3 get-pip.py, cela fonctionne pour moi quand j'ai à peu près le même problème avec vous.

dynamitez
la source
2

Sommaire

J'ai rencontré ce problème sous Mac OS X 10.11.6 (qui dispose de SIP) car j'ai installé pip à l'aide de la commande system easy_install et du fichier local easy-install.pth faisant référence aux bibliothèques système.
Lors de l'installation de packages ultérieurs avec pip, certaines dépendances ont été résolues dans les anciennes bibliothèques System Python.
La solution consistait à supprimer mes bibliothèques installées localement et à réinstaller une version python locale (qui inclut pip) à partir de https://www.python.org/downloads/ afin que le système et les instances python installées localement soient conservés séparément.
J'avais essayé d'utiliser le correctif fix_mac_path.pth dans la réponse de @mfripp mais j'ai trouvé la suppression et la réinstallation du nettoyeur.

Cause

(Ne suivez pas ces étapes)

Je rencontre ce problème en essayant d'installer Ansible. J'ai suivi les documents Ansible pour l'installation sur OS X via pip.
Tout d'abord, j'ai installé pip avec. sudo easy_install pip
Ceci utilisait System easy_install sur /usr/bin/easy_installet installé pip sur. /Library/Python/2.7/site-packages/pip
J'ai également reçu les avertissements suivants lors de l'installation de pip, mais je les ai ignorés et je les ai laissés aveuglément.

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no previously-included files found matching '.coveragerc'
...
Adding pip 9.0.1 to easy-install.pth file
Installing pip script to /usr/local/bin
...
Installed /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
...
Finished processing dependencies for pip

Plus tard, en regardant /Library/Python/2.7/site-packages/easy-install.pth, ça ressemblait à ceci

import sys; sys.__plen = len(sys.path)
./pip-9.0.1-py2.7.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:]; p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p+len(new)

Puis j'ai installé ansible via pip

sudo pip install ansible

J'ai eu des messages pour dire que les exigences étaient déjà remplies par les bibliothèques système

Requirement already satisfied: setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)  
Requirement already satisfied: six>=1.4.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from cryptography>=1.1->paramiko->ansible)

Puis, quand j'ai couru ansible, j'ai eu ce problème

VersionConflict: (setuptools 1.1.6 (/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python), Requirement.parse('setuptools>=11.3'))

et une vérification du pépin a révélé que paramiko avait besoin d'un setuptools plus récent

pip check paramiko
matplotlib 1.3.1 requires tornado, which is not installed.
matplotlib 1.3.1 requires nose, which is not installed.
cryptography 1.7.2 has requirement setuptools>=11.3, but you have setuptools 1.1.6.

Notez que ansible n’a requis que setuptools (pas de version) et donc pip a signalé la dépendance satisfaite par le système setuptools.

Solution

Je résolus en désinstallant les bibliothèques python locales en utilisant le processus laissé entrevoir https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython
Pour moi , cela impliqué

sudo rm -rf /Library/Python

Ensuite, j'ai supprimé les liens symboliques et les exécutables de / usr / local / bin tels que

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*

etc. J'ai aussi supprimé toutes les applications

sudo rm -rf /Applications/Python\ 2.7/

J'ai ensuite téléchargé le package d'installation 2.7.13 pour Mac OS X à l' adresse https://www.python.org/downloads/ et je l'ai installé .

Ceci a installé un python local et un pip at /Library/Frameworks/Python.framework/Versions/2.7ainsi que des liens symboliques dans /usr/local/binlesquels sont séparés les bibliothèques système à /System/Library/Frameworks/Python.frameworket /usr/bin pour que je reçoive

which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
which ansible
/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible

et en pip list

setuptools (28.8.0)
six (1.10.0)

ansible travaille maintenant pour moi

Jason S
la source
1

Pour moi, le PATHavait disparu depuis pip, cela a été confirmé en exécutantpython -m pip

Deux solutions possibles ici, ajouter de pipnouveau à PATH. Dans mon cas, il pipétait de toute façon obsolète, donc la mise à niveau le corrige:

python -m pip install --upgrade pip

✗ pip --version pip 9.0.1 from /Library/Python/2.7/site-packages (python 2.7)

Vinnie James
la source