Próbuję zaktualizować narzędzia instalacyjne. Cóż, właściwie próbuję zaktualizować ansible, ale próbuję zaktualizować narzędzia konfiguracyjne i kończy się niepowodzeniem. Próba zrobienia tego sama również kończy się niepowodzeniem. Nawet próba odinstalowania go kończy się niepowodzeniem
$ 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'")]
Nie mam zielonego pojęcia, co jest nie tak. Patrząc na wszystkie pliki w /System/Library/Frameworks/Python.framework/Versions/2.7/
i poniżej, każdy plik jest własnościąroot:wheel
Jak mogę to naprawić?
sudo
. Zobacz to pytanie . Nie znalazłem jeszcze czasu, żeby się tym zająć.--user
Opcja PIP jest prawdopodobnie co bym spojrzeć. Jeśli znajdziesz praktyczne rozwiązanie, aby „zaktualizować” wszystko, udostępnij je!ipdb
błąd, który jest powiązany zsetuptools
. Aktualizacja setuptools nie działa. Działa z,--user=python
ale nadal nie naprawia błędu ipdb.Odpowiedzi:
Dzieje się tak dzięki ochronie integralności systemu wprowadzonej w systemie OS X El Capitan.
Dodanie
--user python
do polecenia pozwoliło na to.Innymi słowy
źródło
pip
(w przeciwieństwieeasy_install
) nie wymaga sudo, ponieważ pozwalasz mu używaćpython
user, upewniłem się, że działa.csrutil disable
. Uruchom ponownie, a po aktualizacji uruchom ponownie w trybie odzyskiwania i wejdźcsrutil enable
. Po ponownym uruchomieniu ipython nadal działał dobrze.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
Przegląd
Problemem są sprzeczne biblioteki Pythona w połączeniu z ochroną integralności systemu (SIP) w systemie Mac OS, która chroni systemowe biblioteki Pythona.
Moim zdaniem najlepszym rozwiązaniem jest odinstalowanie i ponowne zainstalowanie własnej instalacji Pythona i pozostawienie jej oddzielnie od bibliotek Pythona dostarczanych przez Mac OS, które są chronione przez SIP.
Preferuję to wyłączenie SIP, ponieważ spodziewam się, że SIP będzie częścią wszelkich przyszłych wydań systemu Mac OS, a SIP nie jest tutaj przyczyną, po prostu ujawnia problem konfliktu bibliotek Pythona.
Detale
Miałem też ten problem podczas próby zainstalowania ansible.
Mój problem zaczął się, gdy postępowałem zgodnie z instrukcją instalacji ansibla dla Mac OS, która polega na instalacji przez pip i zainstalowaniu pip za pomocą,
easy_install
jak opisano w Najnowsze wydania Via PipProblem jest podczas instalacji pip ten sposób, tym
easy_install
jest Mac OS przewidzianeeasy_install
w/usr/bin/easy_install
ale zapisuje doeasy-install.pth
pliku na/Library/Python/2.7/site-packages/easy-install.pth
i że odwołania do plików Mac OS pod warunkiem bibliotek Pythona.Następnie instalując ansible, a
pip install ansible
następnie zgłasza, że wymagania setuptools są spełnione przez bibliotekę Python pod adresem Mac OS/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible, która wymaga setuptools, ale nie określa wersji. Inny pakiet zależny, paramiko, wymaga setuptools> = 11.3, ale wydaje się, że nie jest to sprawdzane podczas instalacji ansible przez pip. Kiedy próbujesz uruchomić ansibla, narzeka, że narzędzie konfiguracyjne to 1.1.6. Jest to wersja setuptools dostarczana z systemem Mac OS i jest teraz chroniona przez SIP, więc nie można jej zaktualizować.
Zamiast wyłączać SIP, naprawiłem to, odinstalowując mój lokalny Python, jak wskazałem na https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython, a następnie pobierając i instalując ponownie.
Jeśli martwisz się o rm, możesz zamiast tego mv
odinstalować
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
Następnie pobrałem pakiet instalatora 2.7.13 dla Mac OS X z https://www.python.org/downloads/ i zainstalowałem go.
Spowoduje to zainstalowanie lokalnego języka Python i pip at
/Library/Frameworks/Python.framework/Versions/2.7
oraz dowiązań symbolicznych,/usr/local/bin
a także dodanie/Library/Frameworks/Python.framework/Versions/2.7
do mojej ścieżki $ PATH. Dzięki temu wszystko jest oddzielone od bibliotek dostarczonych przez system Mac OS pod adresem/System/Library/Frameworks/Python.framework
i/usr/bin
tak, aby uzyskaćwhich pip /Library/Frameworks/Python.framework/Versions/2.7/bin/pip
Następnie zainstalowałem ansible z
pip install ansible
Następnie, gdy uruchomię
which ansible
, dostaję/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible
i w
pip list
setuptools (28.8.0) six (1.10.0)
i ansibl teraz działa dla mnie, ponieważ nowa instalacja nie odwołuje się do bibliotek Mac OS Python.
Zauważ, że z powodu ustawienia instalatora $ PATH,
which python
jest teraz/Library/Frameworks/Python.framework/Versions/2.7/bin/python
i/usr/local/bin/python
jest dowiązaniem symbolicznym do tego.Jeśli chcesz systemowego Pythona, musisz użyć / usr / bin / python lub zmienić $ PATH
źródło
Odpowiedź jest taka, że nie można aktualizować setuptools w systemie OSX dla fabrycznego języka Python dostarczanego z systemem operacyjnym. Powodem jest to, że pliki w programie
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
nie mogą być usuwane ani modyfikowane przez użytkownika. Nie tylko zwykły użytkownik, ale nawet jeśli masz uprawnienia roota, nie będziesz mógł modyfikować tych plików.Oczywiście możesz użyć różnych innych metod, aby zainstalować nowszą wersję setuptools, ale nie zastąpi to domyślnego pakietu systemowego. Oznacza to, że jeśli wybierzesz sugerowaną trasę użycia
--user python
flagi, lub zdecydujesz się zainstalować je bez rootowania~/Library
, nie zastąpią one wersji plików systemowych.Powodem, dla którego Ty lub root nie możecie zmodyfikować ustawień domyślnych systemu, są ograniczenia uprawnień SIP w El Capitan +. Możesz wyłączyć SIP, ale generalnie nie jest to zalecane.
Zamiast tego jedynym rozsądnym rozwiązaniem jest użycie virtualenv w Pythonie.
źródło