OSX El Capitan: sudo pip install OSError: [Errno: 1] Opération non autorisée

127

Quand je cours:

sudo pip install ipython

J'obtiens l'erreur suivante

OSError: [Errno: 1] Opération non autorisée: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

La dernière commande exécutée tente de créer le répertoire donné ci-dessus.

De plus, la commande suivante ne parvient pas à installer iPython sans fournir aucune erreur.

sudo pip install --user python

(Je suis sur Mac OS X El Capitan au cas où d'autres personnes sur ce système d'exploitation verraient le même problème.)

Milad M
la source
J'ai ajouté une réponse qui explique comment modifier votre $PATHafin que vous puissiez appeler les exécutables pour les packages --user installés. stackoverflow.com/a/47102398/117471
Bruno Bronosky
2
Vous ne devriez pas utiliser sudoavec --user. Qu'est --user- ce que c'est installer ~/Libraryplutôt que /LibraryVous n'avez pas besoin d'utiliser sudopour installer là-bas. Mais une fois que vous avez installé avec sudo, les répertoires et les fichiers appartiennent tous à root. Ensuite, vous devez utiliser sudopour leur faire autre chose. Ce qui vous obligera à utiliser sudopour d'autres choses pour lesquelles vous ne devriez pas l'utiliser. Ensuite, même une erreur honnête peut aller de la création d'une erreur à la destruction de données.
Bruno Bronosky

Réponses:

205

Les instructions qui disent sudo pip installsont intrinsèquement fausses.

S'il existe un didacticiel indiquant que vous devriez le faire, sudo pipveuillez déposer un bogue contre ce paquet. L'auteur déséduque la communauté Python, car le temps s'est avéré sudo pipêtre une pratique brisée.

OSX El Capitan a introduit un mécanisme pour éviter d'endommager les fichiers du système d'exploitation . /System/Library/Frameworks/Python.framework/Versions/2.7/shareest l'un des emplacements protégés. Un utilisateur normal n’a aucune raison d’y placer ou d’écrire des fichiers . C'est parce que le système d'exploitation lui-même s'appuie sur ces fichiers et sudo pip, avec toute la force donnée par ce qui précède, les écraserait sans condition. Habituellement, de mauvaises choses ne se produisent pas, mais les chances sont là. Apple veut protéger les utilisateurs de leur système d'exploitation contre le brochage accidentel de leur installation.

Au lieu de cela, vous devez installer un package Python, comme IPython, localement dans le dossier de départ de votre utilisateur . Le moyen le plus simple consiste à créer un environnement virtuel , à l' activer , puis à exécuter pip dans l'environnement virtuel.

Exemple:

cd ~  # Go to home directory
virtualenv my-venv
source my-venv/bin/activate
pip install IPython

Plus d'informations

Sinon, on devrait pouvoir le faire pip install --user. Mais encore une fois, aucun sudo n'est nécessaire et vous devez configurer manuellement PATHla variable d'environnement.

Mikko Ohtamaa
la source
5
Si aucun virtualenv n'est souhaité et que vous souhaitez installer globalement (par exemple /Library/Python/2.7/site-packages) des modules, essayez ma solution ci-dessous en utilisant easy_install stackoverflow.com/a/33463702/3078330
smat88dd
3
Avez-vous une citation pour cette perspective sur le fait que 'sudo pip' est mauvais ("car le temps a prouvé que sudo pip était une pratique cassée")? Je ne vois aucune discussion sur sudo dans les citations que vous donnez et le tutoriel répertorie la première étape de la création de virtualenvs sous le nom de «pip install virtualenv», ce qui semble créer une dépendance circulaire essayant de suivre vos conseils.
Von
1
@Von: pip install virtualenvne devrait plus être nécessaire pour Python 3.4+, car ils sont livrés avec un python -m venvéquivalent virtualenv intégré . docs.python.org/3/library/venv.html
Mikko Ohtamaa
29
Sauf votre respect, cela ne répond pas à la question initiale. J'essaie d'installer IPython et de le rendre disponible dans le monde entier (pour tous les utilisateurs de ma machine), et ni un virtualenv ni une pip install --user IPythonaide à ce sujet. De plus, pip install --user IPythonne parvient pas à placer la ipythoncommande dans le $PATH(au moins sur ma machine).
jpetazzo
3
Vous m'avez appris et vous avez aussi économisé mon temps. Un grand merci, j'ai arrêté d'utiliser sudo et tout a fonctionné! Très bonne réponse.
Parth Gupta
24

J'ai eu les mêmes problèmes, mais l'utilisation a easy_install "module"résolu le problème pour moi.

Je ne sais pas pourquoi, mais pip et easy_install utilisent des emplacements d'installation différents, et easy_install a choisi les bons.

Edit: sans revérifier mais à cause des commentaires; il semble que différentes installations (OSX et Brew-installées) interfèrent les unes avec les autres, c'est pourquoi les outils mentionnés pointent en effet vers des emplacements différents (puisqu'ils appartiennent à des installations différentes). Je comprends que généralement ces outils d'un point d'installation vers le même dossier.

smat88dd
la source
Avez-vous deux interpréteurs Python différents installés et easy_installconfigurés pour un autre?
Mikko Ohtamaa
J'ai 2-3 différentes versions de Python installées, mais je dois easy_installpour tous: easy_install-2.6, easy_install-2.7,easy_install-3.5
smat88dd
Très probablement pipet easy_installpointez vers différents Python. Vous pouvez comprendre cela avec la whichcommande UNIX, puis déterminer la bonne pipcommande à utiliser.
Mikko Ohtamaa
1
Peut-être une installation antérieure à partir de l'ancien OSX avant la mise à niveau?
Mikko Ohtamaa
1
pip et easy_install utilisent des emplacements d'installation différents - non, ils utilisent exactement les mêmes emplacements. Cela a fonctionné par accident comme @MikkoOhtamaa essayait de vous le montrer dans ses commentaires. C'est clairement une non-réponse.
Piotr Dobrogost
19

Vous devez réinstaller Python:

brew reinstall python

Pour obtenir une infusion, consultez la page d'accueil de la bière .

David Euler
la source
Je seconde. je cours brew install pythonalors je pense pipest déjà en place. Après cette pipinstallation a travaillé (j'ai eu des problèmes similaires w / autorisations et pip videur sur les installations)
travelingbones
15

pip install --ignore-installed six

Cela fera le travail, alors vous pouvez essayer votre première commande.

Via http://github.com/pypa/pip/issues/3165

Alireza Samar
la source
Dans mon cas, je devais aussi le faire pip install --ignore-installed setuptools.
ithos67
2
Non, cela ne fonctionnera pas à cause du manque d'autorisations.
Piotr Dobrogost
11

Utilisé à la pip3 install <package>place et résolu le problème d'autorisation avec pip.

Keng
la source
10
Pour info, cela a fonctionné car pip3utilise Python 3, qui est généralement installé par l'utilisateur. Python 2 (2.7), en revanche, est livré avec macOS et est protégé comme l'explique la réponse la mieux notée.
Khanh Nguyen
10

TL; DR $ PATH correction

  1. Permet pip install --user package_named'installer un package qui doit inclure des exécutables CLI.
  2. Lancez un shell python et import package_name
  3. Trouvez où lib/python/...se produit dans la sortie et remplacez-le parbin
  4. Il est probable que $HOME/Library/Python/2.7/bin

Détails

En raison de la nouvelle protection de l'intégrité du système dans macOS 10.11 El Capitan, vous ne pouvez plus sudo pip install . Nous ne débattrons pas du bien-fondé de cela ici.

Une autre réponse explique que vous devriez pip install --userce qui est correct. Mais ils vous ont envoyé dans les ruelles pour savoir quoi faire pour vous $PATHafin que vous puissiez avoir accès aux exécutables installés. Heureusement, j'ai déjà résolu un besoin similaire pour une question sans rapport .

Voici une transcription de la façon dont j'ai résolu le problème sur l'un de mes systèmes. J'inclus tout cela plutôt que ce $PATHqui a fonctionné pour moi, car votre système peut être différent du mien. Ce processus devrait fonctionner pour tout le monde.

$ pip install --user jp
Collecting jp
  Downloading jp-0.2.4.tar.gz
Installing collected packages: jp
  Running setup.py install for jp ... done
Successfully installed jp-0.2.4

$ python -c 'import jp; print jp'
<module 'jp' from '/Users/bbronosky/Library/Python/2.7/lib/python/site-packages/jp/__init__.pyc'>

$ find /Users/bbronosky/Library/Python -type f -perm -100
/Users/bbronosky/Library/Python/2.7/bin/jp

$ which jp

$ echo -e '\n''export PATH=$HOME/Library/Python/2.7/bin:$PATH' >> ~/.bashrc

$ bash # starting a new bash process for demo, but you should open a new terminal

$ which jp
/Users/bbronosky/Library/Python/2.7/bin/jp

$ jp
usage: jp <expression> <filepath>
Bruno Bronosky
la source
10

Même erreur

Installing collected packages: six, pyparsing, packaging, appdirs, setuptools
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_set.py", line 784, in install
    **kwargs
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 851, in install
    self.move_wheel_files(self.source_dir, root=root, prefix=prefix)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/req/req_install.py", line 1064, in move_wheel_files
    isolated=self.isolated,
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 345, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg/pip/wheel.py", line 323, in clobber
    shutil.copyfile(srcfile, destfile)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 83, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/six.py'

et ici j'utilise --usersans sudopour résoudre ce problème

$ pip install --user scikit-image h5py keras pygame
Collecting scikit-image
  Downloading http://mirrors.aliyun.com/pypi/packages/65/69/27a1d55ce8f77c8ac757938707105b1070ff4f2ae47d2dc99461bfae4491/scikit_image-0.13.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (28.1MB)
    100% |████████████████████████████████| 28.1MB 380kB/s
Collecting h5py
  Downloading http://mirrors.aliyun.com/pypi/packages/b7/cc/1c29b0815b12de2c92b5323cad60f724ac8f0e39d0166d0b9dfacbcb70dd/h5py-2.7.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (4.5MB)
    100% |████████████████████████████████| 4.5MB 503kB/s
Requirement already satisfied: keras in /Library/Python/2.7/site-packages
Requirement already satisfied: pygame in /Library/Python/2.7/site-packages
Requirement already satisfied: matplotlib>=1.3.1 in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from scikit-image)
Requirement already satisfied: six>=1.7.3 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: pillow>=2.1.0 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: networkx>=1.8 in /Library/Python/2.7/site-packages (from scikit-image)
Requirement already satisfied: PyWavelets>=0.4.0 in /Library/Python/2.7/site-packages (from scikit-image)
Collecting scipy>=0.17.0 (from scikit-image)
  Downloading http://mirrors.aliyun.com/pypi/packages/72/eb/d398b9f63ee936575edc62520477d6c2353ed013bacd656bd0c8bc1d0fa7/scipy-0.19.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (16.2MB)
    100% |████████████████████████████████| 16.2MB 990kB/s
Requirement already satisfied: numpy>=1.7 in /Library/Python/2.7/site-packages (from h5py)
Requirement already satisfied: theano in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: pyyaml in /Library/Python/2.7/site-packages (from keras)
Requirement already satisfied: python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: tornado in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: pyparsing>=1.5.6 in /Users/qiuwei/Library/Python/2.7/lib/python/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: nose in /Library/Python/2.7/site-packages (from matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: olefile in /Library/Python/2.7/site-packages (from pillow>=2.1.0->scikit-image)
Requirement already satisfied: decorator>=3.4.0 in /Library/Python/2.7/site-packages (from networkx>=1.8->scikit-image)
Requirement already satisfied: singledispatch in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: certifi in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Requirement already satisfied: backports_abc>=0.4 in /Library/Python/2.7/site-packages (from tornado->matplotlib>=1.3.1->scikit-image)
Installing collected packages: scipy, scikit-image, h5py
Successfully installed h5py-2.7.0 scikit-image-0.13.0 scipy-0.19.0 

J'espère que cela aidera quelqu'un qui rencontre un problème similaire!

GoingMyWay
la source
3
Vous ne devriez pas utiliser sudoavec --user. Qu'est --user- ce que c'est installer ~/Libraryplutôt que /LibraryVous n'avez pas besoin d'utiliser sudopour installer là-bas. Mais une fois que vous avez installé avec sudo, les répertoires et les fichiers appartiennent tous à root. Ensuite, vous devez utiliser sudopour leur faire autre chose. Ce qui vous obligera à utiliser sudopour d'autres choses pour lesquelles vous ne devriez pas l'utiliser. Ensuite, même une erreur honnête peut aller de la création d'une erreur à la destruction de données.
Bruno Bronosky
9

J'ai eu les mêmes problèmes. Comme d'autres l'ont mentionné, n'exécutez pas pip install avec sudo. Courir

brew doctor 

et corrigez les avertissements et vous devriez être en mesure de procéder à l'installation de pip.

Apadana
la source
6

Il est difficile de faire travailler pip sur El Capitan pour plusieurs raisons:

  1. OS X ne définit pas correctement certaines variables distutils, donc pip essaie d'installer les fichiers auxiliaires dans les emplacements sous /System/Library/. El Capitan bloque cela, qui est l'erreur que vous rencontrez.
  2. OS X inclut un certain nombre de packages obsolètes sous /System/Library/. pip veut souvent les mettre à niveau mais ne le peut pas sur El Capitan.
  3. OS X place /System/Library/plus haut dans l'ordre de recherche python que /Library/Python/2.7/site-packages(l'emplacement du package python à l'échelle du système), donc même si vous parvenez à installer des versions plus récentes de certains packages, les anciennes sont toujours chargées, brisant certaines dépendances.

Il existe des solutions de contournement pour tous ces éléments sur https://apple.stackexchange.com/a/223163/143849 . Mais il vaut peut-être mieux installer votre propre version de Python via le programme d'installation standard de Python, Homebrew ou Anaconda.

Matthias Fripp
la source
4

Je suppose que vous avez un conflit avec un autre package. Pour moi c'était six. Vous devez donc utiliser une commande comme celle-ci:

pip install google-api-python-client --upgrade --ignore-installed six

ou

pip install --ignore-installed six

Ruhul Amin
la source
3
Quelle partie de la réponse donnée par @MikkoOhtamaa vous ne comprenez pas que vous suggérez toujours d'utiliser sudo avec pip ?
Piotr Dobrogost
@PiotrDobrogost, pourquoi ne pas lire correctement avant de demander. Ma réponse est concernant six.
Ruhul Amin
3
Encore une fois, quelle partie de la réponse donnée par @MikkoOhtamaa vous ne comprenez pas que vous suggérez toujours d'utiliser sudo avec pip ?
Piotr Dobrogost
1

Je suis entièrement d'accord avec Mikko, mais si vous voulez toujours le faire, voici le chemin:

  • Redémarrer en mode de récupération (Maintenez cmd + R)
  • Ouvrir le terminal à partir des utilitaires
  • Utilisez la commande csrutil disable
GilliM
la source
6
Cela pourrait être un conseil dangereux sans expliquer les implications de la désactivation de la protection de l'intégrité du système. Une considération est l'espoir qu'il ne fonctionnera plus jamais correctement si vous ne le réactivez pas assez rapidement, un peu comme Windows UAC et la virtualisation.
andy magoon
0

J'ai installé python2.7 via brew et ce qui suit a résolu mon problème

infusion installer numpy

Il installe python3, mais il fonctionne toujours et le configure également pour 2.7.

Aerodyno
la source
A parfaitement fonctionné. Merci!!
NightFury