webentwicklung-frage-antwort-db.com.de

Setuptools unter OSX El Capitan aktualisieren

Ich versuche, Setuptools zu aktualisieren. Eigentlich versuche ich, ein Upgrade für ansible durchzuführen, aber es versucht, setuptools zu aktualisieren, und es schlägt fehl. Der Versuch, es selbst zu tun, scheitert ebenfalls. 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 keine Ahnung, was los ist. Betrachtet man alle Dateien in /System/Library/Frameworks/Python.framework/Versions/2.7/ Und darunter, so gehört jede einzelne Datei root:wheel

Wie kann ich es reparieren?

79
gman

Dies ist auf den in OS X El Capitan eingeführten Systemintegritätsschutz zurückzuführen.

Das Hinzufügen von --user python Zum Befehl ermöglichte dies.

Mit anderen Worten

pip install --upgrade setuptools --user python
186
Kof

Überblick

Das Problem besteht in Konflikten zwischen Python Bibliotheken und dem Systemintegritätsschutz (SIP) unter Mac OS, der die Systembibliotheken Python schützt.

Meiner Meinung nach ist die beste Lösung, Ihre eigene Python -Installation zu deinstallieren und erneut zu installieren und diese getrennt von den von Mac OS bereitgestelltenPython -Bibliotheken aufzubewahren, die durch SIP geschützt sind.

Ich bevorzuge dies, um SIP zu deaktivieren, da ich erwarte, dass SIP Teil zukünftiger Mac OS-Versionen sein wird, und SIP nicht die Ursache ist, sondern nur die Problem von in Konflikt stehenden Python Bibliotheken.

Einzelheiten

Ich hatte auch dieses Problem versucht, ansible zu installieren.

Mein Problem begann, als ich die anzeigbaren Installationsanweisungen für Mac OS befolgte, die laut Latest Releases Via Pip über pip zu installieren und über easy_install Zu installieren sind

Das Problem bei der Installation von pip auf diese Weise ist, dass easy_install Für das Mac OS easy_install Unter /usr/bin/easy_install Bereitgestellt wird, aber in die easy-install.pth - Datei unter /Library/Python/2.7/site-packages/easy-install.pth und diese Datei verweist auf die von Mac OS bereitgestellten Python Bibliotheken.

Nach der Installation von ansible mit pip install ansible Wird gemeldet, dass die Setuptools-Anforderung von der von Mac OS bereitgestellten Python-Bibliothek unter /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python Erfüllt wird.
Ansible benötigt setuptools, gibt jedoch keine Version an. Ein anderes abhängiges Paket, paramiko, benötigt setuptools> = 11.3, aber dies scheint bei der Installation von ansible via pip nicht überprüft zu werden. Wenn Sie versuchen, ansible auszuführen, obwohl es beanstandet, dass es sich bei den Setup-Tools um 1.1.6 handelt. Dies ist die Version von setuptools, die mit Mac OS geliefert wird und jetzt durch SIP geschützt ist. Daher kann kein Upgrade durchgeführt werden.

Anstatt SIP zu deaktivieren, habe ich dies behoben, indem ich mein lokales Python deinstalliert habe (siehe https://docs.python.org/2.7/using/mac.html#getting-and-installing) -macpython und dann herunterladen und erneut installieren.

Wenn Sie sich Sorgen um die rm machen, können Sie stattdessen mv
Zum deinstallieren habe ich gemacht

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

Ich habe dann das 2.7.13-Installationspaket für Mac OS X von https://www.python.org/downloads/ heruntergeladen und installiert.

Dies installierte ein lokales python und pip bei /Library/Frameworks/Python.framework/Versions/2.7 Und Symlinks in /usr/local/bin Sowie das Voranstellen von /Library/Frameworks/Python.framework/Versions/2.7 Zu meinem $ PATH. Dies trennt alles von den von Mac OS bereitgestellten Bibliotheken unter /System/Library/Frameworks/Python.framework Und /usr/bin, Damit ich sie bekomme

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

Ich habe dann ansible mit pip install ansible Installiert
Wenn ich dann which ansible Renne, bekomme ich

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

und in pip list

setuptools (28.8.0)
six (1.10.0)

und ansible funktioniert jetzt bei mir, da die Mac OS Python Bibliotheken bei der Neuinstallation nicht referenziert werden.

Beachten Sie, dass aufgrund der Installer-Einstellung $ PATH which python Jetzt /Library/Frameworks/Python.framework/Versions/2.7/bin/python Ist und /usr/local/bin/python Ein Symlink dazu ist.
Wenn Sie das System Python wollen, müssen Sie/usr/bin/python verwenden oder den $ PATH ändern

2
Jason S

Die Antwort ist, dass Sie setuptools unter OSX für die mit dem Betriebssystem gelieferte Factory python nicht aktualisieren können. Der Grund ist, dass die Dateien in /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.

Sicher, Sie können verschiedene andere Methoden verwenden, um eine neuere Version von setuptools zu installieren, dies setzt jedoch das Standardsystempaket nicht außer Kraft. Das heißt, wenn Sie den vorgeschlagenen Verwendungsweg mit dem Flag --user python Einschlagen oder diese ohne Rootberechtigung in ~/Library Installieren, wird die Version der Systemdateien nicht überschrieben.

Der Grund, warum Sie oder Root die Systemstandards nicht ändern können, liegt an den SIP - Berechtigungseinschränkungen in El Capitan +. Sie können SIP deaktivieren, dies wird jedoch im Allgemeinen nicht empfohlen.

Stattdessen ist die einzige vernünftige Lösung die Verwendung eines virtuellen python - Env.

1
I K