Обновление setuptools на OSX El Capitan
Я пытаюсь обновить setuptools. Ну на самом деле я пытаюсь обновить ansible, но он пытается обновить setuptools и терпит неудачу. Попытка сделать это сама также терпит неудачу. Даже попытка удалить его не удается
$ 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'")]
Я не имею ни малейшего понятия, что случилось. Глядя на все файлы /System/Library/Frameworks/Python.framework/Versions/2.7/ и ниже каждый файл принадлежит root:wheel
как я могу это исправить?
3 ответов:
это происходит из-за защиты целостности системы, введенной в OS X El Capitan.
добавлять
--user pythonчтобы команда позволила этому работать.другими словами
pip install --upgrade setuptools --user python
ответ заключается в том, что вы не можете обновить setuptools на OSX для заводского python, который поставляется с ОС. Причина в том, что файлы
/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/pythonне может быть удален или изменен пользователем. Не только обычный пользователь, но даже если у вас есть права суперпользователя, вы не сможете изменить эти файлы.конечно, вы можете использовать различные другие методы для установки более новой версии setuptools, но это не будет переопределять системный пакет по умолчанию. Значение, если вы идете по предложенному маршруту использования элемент
--user pythonфлаг, или вы решите установить их без корня в~/Library, они не будут переопределять версию системных файлов.причина, по которой вы или root не можете изменить системные значения по умолчанию, связана с ограничениями разрешения SIP в El Capitan+. Вы можете отключить SIP, но это, как правило, не рекомендуется.
вместо этого единственным разумным решением является использование Python virtualenv.
обзор
проблема заключается в конфликте библиотек Python в сочетании с защитой целостности системы (SIP) на Mac OS, которая защищает системные библиотеки Python.
лучшим решением, на мой взгляд, является удаление и переустановка собственной установки Python и сохранение ее отдельно от библиотек Python, предоставляемых Mac OS, которые защищены SIP.
я предпочитаю это отключить SIP, поскольку я ожидаю, что SIP станет частью любой будущей Mac OS релизы и SIP здесь не являются причиной, это просто обнажает проблему конфликтующих библиотек Python.
подробности
у меня также была эта проблема, пытаясь установить ansible.
моя проблема началась, когда я следовал инструкциям по установке ansible для Mac OS, который должен установить через pip и установить pip с
easy_installкак описано в Последние Релизы Через Pipпроблема при установке pip таким образом,
easy_install- это Мак ОСeasy_installat/usr/bin/easy_installно он пишет на/Library/Python/2.7/site-packages/easy-install.pthи этот файл ссылается на библиотеки Python, предоставленные Mac OS.последующая установка ansible с
pip install ansibleзатем сообщает, что требование setuptools удовлетворяется библиотекой Python Mac OS, предоставленной по адресу/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible требует setuptools, но не указывает версию. Другой зависимый пакет, paramiko, требует setuptools >= 11.3, но это, похоже, не проверяется, когда установка ansible через pip. Когда вы пытаетесь запустить ansible, хотя он жалуется, что setup tools-это 1.1.6 это версия setuptools, поставляемая с Mac OS, и теперь защищена SIP, поэтому ее нельзя обновить.вместо того, чтобы отключить SIP, я исправил это, удалив мой локальный Python, как намекнул на at https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython а затем загрузка и установка снова.
если вы обеспокоены rm, вы можете mv вместо
Чтобы удалить я сделал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затем я загрузил установочный пакет 2.7.13 для Mac OS X изhttps://www.python.org/downloads/ и установил его.
это установило локальный python и pip в
/Library/Frameworks/Python.framework/Versions/2.7и символические ссылки в/usr/local/binа также знаком/Library/Frameworks/Python.framework/Versions/2.7на мой путь. Это держит все отдельно от Mac OS предоставляемых библиотек в/System/Library/Frameworks/Python.frameworkи/usr/binтак что я получаюwhich pip /Library/Frameworks/Python.framework/Versions/2.7/bin/pipI затем устанавливается ansible с
pip install ansible
Затем, когда я бегуwhich ansibleя/Library/Frameworks/Python.framework/Versions/2.7/bin/ansibleи
pip listsetuptools (28.8.0) six (1.10.0)и ansible теперь работает для меня, потому что библиотеки Mac OS Python не ссылаются на новую установку.
обратите внимание, что из-за установки $PATH,
which pythonтеперь/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonи/usr/local/bin/pythonявляется символической ссылкой на это.
Если вы хотите системный Python, вам придется использовать /usr/bin / python или изменить $PATH
Comments