Обновление 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



как я могу это исправить?

607   3  

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_install at /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/pip

I затем устанавливается ansible с pip install ansible
Затем, когда я бегу which ansible я

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

и pip list

setuptools (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

    Ничего не найдено.