OSX El Capitan: sudo pip install OSError: [Errno: 1] Vorgang nicht zulässig

127

Wenn ich renne:

sudo pip install ipython

Ich erhalte den folgenden Fehler

OSError: [Errno: 1] Vorgang nicht zulässig: '/System/Library/Frameworks/Python.framework/Versions/2.7/share'

Der zuletzt ausgeführte Befehl versucht, das oben angegebene Verzeichnis zu erstellen.

Mit dem folgenden Befehl kann iPython nicht ohne Fehler installiert werden.

sudo pip install --user python

(Ich bin unter Mac OS X El Capitan, falls andere Leute unter diesem Betriebssystem das gleiche Problem sehen.)

Milad M.
quelle
Ich habe eine Antwort hinzugefügt, die erklärt, wie Sie Ihre ändern können, $PATHdamit Sie die ausführbaren Dateien für installierte --user-Pakete aufrufen können. stackoverflow.com/a/47102398/117471
Bruno Bronosky
2
Sie sollten nicht sudomit verwenden --user. Was --userist zu installieren, ~/Libraryanstatt /LibrarySie müssen nicht verwenden sudo, um dort zu installieren. Sobald Sie mit installiert haben sudo, gehören die Verzeichnisse und Dateien allen root. Dann müssen Sie verwenden, sudoum ihnen etwas anderes anzutun. Was wiederum erfordert, dass Sie es sudofür andere Dinge verwenden, für die Sie es nicht verwenden sollten. Dann kann sogar ein ehrlicher Fehler vom Auslösen eines Fehlers zur Zerstörung von Daten führen.
Bruno Bronosky

Antworten:

205

Anweisungen sudo pip installsind von Natur aus falsch.

Wenn es ein Tutorial gibt, das besagt, dass Sie es tun sollten, melden Sie sudo pipbitte einen Fehler gegen dieses Paket. Der Autor entbindet die Python-Community, da sich die Zeit sudo pipals gebrochene Praxis erwiesen hat .

OSX El Capitan hat einen Mechanismus eingeführt, um eine Beschädigung der Betriebssystemdateien zu verhindern . /System/Library/Frameworks/Python.framework/Versions/2.7/shareist einer der geschützten Orte. Ein normaler Benutzer hat keinen Grund, dort Dateien abzulegen oder zu schreiben . Dies liegt daran, dass das Betriebssystem selbst auf diese Dateien angewiesen ist und sie sudo pipmit der oben angegebenen Kraft bedingungslos überschreiben würde. Normalerweise würden keine schlechten Dinge passieren, aber die Chancen stehen gut. Apple möchte seine Betriebssystembenutzer davor schützen, ihre Installation versehentlich zu blockieren.

Stattdessen müssen Sie ein Python-Paket wie IPython lokal im Home-Ordner Ihres Benutzers installieren . Am einfachsten ist es, eine virtuelle Umgebung zu erstellen , zu aktivieren und dann pip in der virtuellen Umgebung auszuführen .

Beispiel:

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

Mehr Info

Alternativ sollte man dazu in der Lage sein pip install --user. Aber auch hier wird kein Sudo benötigt und Sie müssen die PATHUmgebungsvariable manuell einrichten .

Mikko Ohtamaa
quelle
5
Wenn keine virtuelle Umgebung gewünscht wird und Sie Module (z. B. /Library/Python/2.7/site-packages) global installieren möchten, versuchen Sie meine unten easy_install stehende
smat88dd
3
Haben Sie ein Zitat für diese Perspektive, dass 'sudo pip' schlecht ist ("wie die Zeit gezeigt hat, dass sudo pip eine gebrochene Praxis ist")? Ich sehe keine Diskussion über sudo in den Zitaten, die Sie geben, und das Tutorial listet den ersten Schritt zum Erstellen von virtuellen Envs als 'pip install virtualenv' auf, was eine zirkuläre Abhängigkeit zu schaffen scheint, die versucht, Ihrem Rat zu folgen.
Von
1
@Von: pip install virtualenvsollte für Python 3.4+ nicht mehr benötigt werden, da sie mit integriertem python -m venvvirtualenv-Äquivalent geliefert werden. docs.python.org/3/library/venv.html
Mikko Ohtamaa
29
Bei allem Respekt geht das nicht auf die ursprüngliche Frage ein. Ich versuche, IPython zu installieren und global verfügbar zu machen (für alle Benutzer auf meinem Computer), und weder eine virtuelle Umgebung noch pip install --user IPythonHilfe dabei. Außerdem pip install --user IPythonkann der ipythonBefehl nicht in $PATH(zumindest auf meinem Computer) platziert werden.
Jpetazzo
3
Du hast es mir beigebracht und auch meine Zeit gespart. Ein großes Dankeschön Ich habe aufgehört, sudo zu benutzen und alles hat funktioniert! Gute Antwort.
Parth Gupta
24

Ich hatte die gleichen Probleme, aber mit easy_install "module"löste das Problem für mich.

Ich bin mir nicht sicher warum, aber pip und easy_install verwenden unterschiedliche Installationsorte, und easy_install hat die richtigen ausgewählt.

Bearbeiten: ohne erneute Überprüfung, aber wegen der Kommentare; Es scheint, dass sich verschiedene (OSX- und Brew-installierte) Installationen gegenseitig stören, weshalb die genannten Tools tatsächlich auf unterschiedliche Speicherorte verweisen (da sie zu unterschiedlichen Installationen gehören). Ich verstehe, dass normalerweise diese Tools von einem Installationspunkt auf denselben Ordner verweisen.

smat88dd
quelle
Haben Sie zwei verschiedene Python-Interpreter installiert und easy_installsind für einen anderen konfiguriert?
Mikko Ohtamaa
Ich mache 2-3 verschiedene Python - Versionen installiert haben, aber ich habe easy_installfür alle von ihnen: easy_install-2.6, easy_install-2.7,easy_install-3.5
smat88dd
Höchstwahrscheinlich pipund easy_installverweisen auf verschiedene Pythons. Sie können dies mit dem whichUNIX-Befehl herausfinden und dann den richtigen pipBefehl für die Verwendung herausfinden .
Mikko Ohtamaa
1
Könnte vor dem Upgrade eine vorherige Installation von altem OSX erfolgen?
Mikko Ohtamaa
1
pip und easy_install verwenden unterschiedliche Installationsorte - nein, sie verwenden genau dieselben Speicherorte. Es hat zufällig funktioniert, als @MikkoOhtamaa versuchte, es Ihnen in seinen Kommentaren zu zeigen. Dies ist eindeutig keine Antwort.
Piotr Dobrogost
19

Sie sollten Python neu installieren:

brew reinstall python

Informationen zum Brauen finden Sie auf der Brauhomepage .

David Euler
quelle
Ich stimme zu. Ich renne brew install pythondann denke ich pipist schon da. Nachdem diese pipInstallation funktioniert hat (ich hatte ähnliche Probleme mit Berechtigungen und Pip Bailing bei Installationen)
Travellingbones
15

pip install --ignore-installed six

Dies erledigt den Job, dann können Sie Ihren ersten Befehl versuchen.

Über http://github.com/pypa/pip/issues/3165

Alireza Samar
quelle
In meinem Fall musste ich auch tun pip install --ignore-installed setuptools.
ithos67
2
Nein, dies wird aufgrund fehlender Berechtigungen nicht funktionieren.
Piotr Dobrogost
11

Wird pip3 install <package>stattdessen verwendet und das Berechtigungsproblem mit gelöst pip.

Keng
quelle
10
Zu Ihrer Information, dies hat funktioniert, weil pip3Python 3 verwendet wird, das normalerweise vom Benutzer installiert wird. Python 2 (2.7) wird dagegen mit macOS ausgeliefert und ist geschützt, wie in der am besten bewerteten Antwort erläutert.
Khanh Nguyen
10

TL; DR $ PATH fix

  1. Verwenden Sie pip install --user package_namediese Option, um ein Paket zu installieren, das ausführbare CLI-Dateien enthalten soll.
  2. Starten Sie eine Python-Shell und import package_name
  3. Finden Sie heraus, wo lib/python/...in der Ausgabe vorkommt, und ersetzen Sie alles durchbin
  4. Es ist wahrscheinlich $HOME/Library/Python/2.7/bin

Einzelheiten

Aufgrund des neuen Systemintegritätsschutzes in macOS 10.11 El Capitan können Sie dies nicht mehr sudo pip install. Wir werden hier nicht darüber diskutieren.

Eine andere Antwort erklärt, dass Sie sollten, pip install --userwas richtig ist. Aber sie haben Sie in die Seitengassen geschickt, um herauszufinden, was Sie tun müssen, $PATHdamit Sie Zugriff auf installierte ausführbare Dateien erhalten. Zum Glück habe ich bereits ein ähnliches Bedürfnis nach einer nicht verwandten Frage gelöst .

Hier ist eine Abschrift davon, wie ich das Problem auf einem meiner Systeme gelöst habe. Ich schließe alles eher ein als das $PATH, was für mich funktioniert hat, weil Ihr System sich möglicherweise von meinem unterscheidet. Dieser Prozess sollte für alle funktionieren.

$ 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
quelle
10

Gleicher Fehler

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'

und hier benutze ich --userohne sudodieses Problem zu lösen

$ 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 

Hoffe, es wird jemandem helfen, der auf ein ähnliches Problem stößt!

Ich gehe meinen Weg
quelle
3
Sie sollten nicht sudomit verwenden --user. Was --userist zu installieren, ~/Libraryanstatt /LibrarySie müssen nicht verwenden sudo, um dort zu installieren. Sobald Sie mit installiert haben sudo, gehören die Verzeichnisse und Dateien allen root. Dann müssen Sie verwenden, sudoum ihnen etwas anderes anzutun. Was wiederum erfordert, dass Sie es sudofür andere Dinge verwenden, für die Sie es nicht verwenden sollten. Dann kann sogar ein ehrlicher Fehler vom Auslösen eines Fehlers zur Zerstörung von Daten führen.
Bruno Bronosky
9

Ich hatte die gleichen Probleme. Wie andere bereits erwähnt haben, führen Sie die Pip-Installation nicht mit sudo aus. Lauf

brew doctor 

und beheben Sie die Warnungen, und Sie sollten in der Lage sein, mit der Pip-Installation fortzufahren.

Apadana
quelle
6

Es ist aus mehreren Gründen schwierig, Pip an El Capitan zum Laufen zu bringen:

  1. OS X setzt einige distutils-Variablen nicht richtig, daher versucht pip, Zusatzdateien an Speicherorten unter zu installieren /System/Library/. El Capitan blockiert dies. Dies ist der Fehler, auf den Sie stoßen.
  2. OS X enthält eine Reihe veralteter Pakete unter /System/Library/. pip möchte diese oft aktualisieren, kann sie aber nicht auf El Capitan.
  3. OS X liegt /System/Library/in der Python-Suchreihenfolge höher als /Library/Python/2.7/site-packages(der systemweite Speicherort des Python-Pakets). Selbst wenn Sie neuere Versionen einiger Pakete installieren, werden die alten weiterhin geladen, wodurch einige Abhängigkeiten aufgehoben werden.

Für all dies gibt es Problemumgehungen unter https://apple.stackexchange.com/a/223163/143849 . Am besten installieren Sie jedoch Ihre eigene Python-Version über das Standard-Python-Installationsprogramm Homebrew oder Anaconda.

Matthias Fripp
quelle
4

Ich denke, Sie haben einen Konflikt mit anderen Paketen. Für mich war es six. Sie müssen also einen Befehl wie diesen verwenden:

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

oder

pip install --ignore-installed six

Ruhul Amin
quelle
3
Welchen Teil der Antwort von @MikkoOhtamaa verstehen Sie nicht, dass Sie immer noch vorschlagen, sudo mit pip zu verwenden ?
Piotr Dobrogost
@PiotrDobrogost, warum liest du nicht richtig, bevor du fragst? Meine Antwort bezieht sich auf six.
Ruhul Amin
3
Welchen Teil der Antwort von @MikkoOhtamaa verstehen Sie nicht, dass Sie immer noch vorschlagen, sudo mit pip zu verwenden ?
Piotr Dobrogost
1

Ich stimme Mikko voll und ganz zu, aber wenn Sie es trotzdem tun möchten, ist hier der Weg:

  • Im Wiederherstellungsmodus neu starten (cmd + R gedrückt halten)
  • Öffnen Sie das Terminal über die Dienstprogramme
  • Verwenden Sie den Befehl csrutil disable
GilliM
quelle
6
Dies kann ein gefährlicher Rat sein, ohne die Auswirkungen der Deaktivierung des Systemintegritätsschutzes zu erläutern. Eine Überlegung ist die Erwartung, dass es nie wieder richtig funktioniert, wenn Sie es nicht relativ schnell wieder aktivieren, ähnlich wie bei Windows UAC und Virtualisierung.
Andy Magoon
0

Ich habe Python2.7 über Brew installiert und das Folgende hat mein Problem gelöst

brauen install numpy

Es installiert Python3, funktioniert aber immer noch und richtet es auch für 2.7 ein.

Aerodyno
quelle
Hat einwandfrei funktioniert. Vielen Dank!!
NightFury