Ich versuche, setuptools zu aktualisieren. Nun, eigentlich versuche ich, ansible zu aktualisieren, aber es versucht, setuptools zu aktualisieren und schlägt fehl. Der Versuch, es selbst zu tun, schlägt ebenfalls fehl. Selbst der Versuch, es zu deinstallieren, schlägt fehl
$ 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'")]
Ich habe nicht die geringste Ahnung, was los ist. Wenn Sie sich alle Dateien in /System/Library/Frameworks/Python.framework/Versions/2.7/
und unter jeder einzelnen Datei ansehen, gehört sie jederroot:wheel
Wie kann ich es reparieren?
macos
python-2.7
setuptools
gman
quelle
quelle
sudo
. Siehe diese Frage . Ich habe mir noch nicht die Zeit genommen, mich damit zu befassen. Die--user
Option zu pip ist wahrscheinlich das, worüber ich nachdenken würde. Wenn Sie eine praktische Lösung finden, um alles zu "aktualisieren", teilen Sie diese bitte mit!ipdb
Fehler, der mit verknüpft istsetuptools
. Das Aktualisieren von setuptools funktioniert nicht. Es funktioniert mit--user=python
, behebt den ipdb-Fehler jedoch nicht.Antworten:
Dies geschieht aufgrund des in OS X El Capitan eingeführten Systemintegritätsschutzes.
Durch Hinzufügen
--user python
zum Befehl konnte dies funktionieren.Mit anderen Worten
quelle
pip
(im Gegensatz zueasy_install
) erfordert kein Sudo, da Sie espython
Benutzer verwenden lassen, habe ich sichergestellt, dass es funktioniert.csrutil disable
. Starten Sie den Computer neu und starten Sie ihn nach dem Upgrade im Wiederherstellungsmodus neucsrutil enable
. Nach einem Neustart funktionierte ipython für mich weiterhin einwandfrei.Collecting setuptools Using cached setuptools-28.2.0-py2.py3-none-any.whl Requirement already up-to-date: python in /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload Installing collected packages: setuptools Successfully installed setuptools-1.1.6
Überblick
Das Problem sind widersprüchliche Python-Bibliotheken in Kombination mit System Integrity Protection (SIP) unter Mac OS, das die Python-Systembibliotheken schützt.
Meiner Meinung nach ist die beste Lösung, Ihre eigene Python-Installation zu deinstallieren und neu zu installieren und diese von den von Mac OS bereitgestellten Python-Bibliotheken zu trennen, die durch SIP geschützt sind.
Ich bevorzuge dies, um SIP zu deaktivieren, da ich davon ausgehe, dass SIP Teil zukünftiger Mac OS-Versionen sein wird und SIP hier nicht die Ursache ist, sondern nur das Problem widersprüchlicher Python-Bibliotheken aufdeckt.
Einzelheiten
Ich hatte auch dieses Problem beim Versuch, ansible zu installieren.
Mein Problem begann, als ich die ansiblen Installationsanweisungen für Mac OS befolgte, die über pip installiert und pip mit installiert werden sollen,
easy_install
wie unter Neueste Versionen über Pip beschriebenDas Problem ist , wenn auf diese Weise der Installation von Pip, das
easy_install
ist der Mac OS zur Verfügung gestellteasy_install
an ,/usr/bin/easy_install
aber es schreibt in dieeasy-install.pth
Datei auf/Library/Python/2.7/site-packages/easy-install.pth
und diese Datei verweist auf die Mac OS zur Verfügung gestellt Python - Bibliotheken.Die anschließende Installation von ansible mit dem
pip install ansible
Bericht, dass die Setuptools-Anforderung von Mac OS erfüllt wird, sofern die Python-Bibliothek bei/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible Setuptools erfordert, jedoch keine Version angibt. Ein anderes abhängiges Paket, paramiko, erfordert setuptools> = 11.3, aber dies scheint bei der Installation von ansible via pip nicht überprüft zu werden. Wenn Sie versuchen, ansible auszuführen, wird jedoch beanstandet, dass die Setup-Tools 1.1.6 sind. Dies ist die Version der mit Mac OS bereitgestellten Setuptools, die jetzt durch SIP geschützt ist und daher nicht aktualisiert werden kann.
Anstatt SIP zu deaktivieren, habe ich dies behoben, indem ich mein lokales Python wie unter https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython angegeben deinstalliert und dann heruntergeladen und erneut installiert habe.
Wenn Sie über die rm besorgt sind, können Sie stattdessen mv
Zum Deinstallieren habe ich getan
Ich habe dann das 2.7.13-Installationspaket für Mac OS X von https://www.python.org/downloads/ heruntergeladen und installiert.
Dies installierte eine lokale Python und Pip at
/Library/Frameworks/Python.framework/Versions/2.7
und Symlinks in/usr/local/bin
sowie/Library/Frameworks/Python.framework/Versions/2.7
vor meinem $ PATH. Dies hält alles getrennt von den von Mac OS bereitgestellten Bibliotheken/System/Library/Frameworks/Python.framework
und/usr/bin
damit bekomme ichIch habe dann ansible installiert mit
pip install ansible
Dann , wenn ich laufe
which ansible
ich getund in
pip list
und ansible funktioniert jetzt für mich, da die Mac OS Python-Bibliotheken bei der Neuinstallation nicht referenziert werden.
Beachten Sie, dass aufgrund der Installateur $ PATH Einstellung,
which python
ist jetzt/Library/Frameworks/Python.framework/Versions/2.7/bin/python
und/usr/local/bin/python
ist ein symbolischer Link zu diesem.Wenn Sie das System Python möchten, müssen Sie / usr / bin / python verwenden oder den $ PATH ändern
quelle
Die Antwort ist, dass Sie setuptools unter OSX nicht für die werkseitige Python aktualisieren können, die im Lieferumfang des Betriebssystems enthalten ist. Der Grund ist, dass die Dateien
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
nicht vom Benutzer entfernt oder geändert werden können. Nicht nur der normale Benutzer, sondern auch wenn Sie über Root-Berechtigungen verfügen, können Sie diese Dateien nicht ändern.Natürlich können Sie verschiedene andere Methoden verwenden, um eine neuere Version von setuptools zu installieren, aber dies überschreibt nicht das Standardsystempaket. Das heißt, wenn Sie den vorgeschlagenen Verwendungsweg für das
--user python
Flag wählen oder diese ohne Root installieren~/Library
, wird die Version der Systemdateien nicht überschrieben.Der Grund, warum Sie oder root die Systemstandards nicht ändern können, liegt an den SIP-Berechtigungsbeschränkungen in El Capitan +. Sie können SIP deaktivieren, dies wird jedoch im Allgemeinen nicht empfohlen.
Stattdessen ist die einzig vernünftige Lösung die Verwendung einer virtuellen Python-Umgebung.
quelle