Подтвердить что ты не робот

Обновление setuptools на OSX El Capitan

Я пытаюсь обновить setuptools. Ну, на самом деле я пытаюсь выполнить обновление, но он пытается обновить 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

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

4b9b3361

Ответ 1

Это происходит из-за защиты целостности системы, введенной в OS X El Capitan.

Добавление --user python в команду позволило это работать.

Другими словами

pip install --upgrade setuptools --user python

Ответ 2

Ответ заключается в том, что вы не можете обновлять setuptools в OSX для пиона factory, который поставляется с ОС. Причина в том, что файлы в /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python не могут быть удалены или изменены пользователем. Не только обычный пользователь, но даже если у вас есть права root, вы не сможете изменить эти файлы.

Конечно, вы можете использовать различные другие методы для установки более новой версии setuptools, но это не будет отменять системный пакет по умолчанию. Если вы идете по предложенному маршруту использования флага --user python или вы хотите установить их без root в ~/Library, они не будут переопределять версию системных файлов.

Причина, по которой вы или корень не можете изменить системные значения по умолчанию, объясняется ограничениями SIP-разрешений в El Capitan+. Вы можете отключить SIP, но это обычно не рекомендуется.

Вместо этого единственным разумным решением является использование виртуального виртуального питона.

Ответ 3

Обзор

Проблема заключается в конфликтующих библиотеках Python в сочетании с System Integrity Protection (SIP) в Mac OS, которая защищает системы Python-библиотек.

Лучшим решением, на мой взгляд, является удаление и переустановка вашей собственной установки Python и сохранение этого в библиотеках Python, предоставляемых Mac OS, которые защищены SIP.

Я рекомендую отключить SIP, поскольку я ожидаю, что SIP станет частью любых будущих выпусков Mac OS и SIP не является причиной здесь, он просто раскрывает проблему конфликтующих библиотек Python.

Подробнее

У меня также возникла проблема с установкой прав.

Моя проблема началась, когда я следил за инструкциями по установке для Mac OS, которые нужно установить через pip и установить pip с помощью easy_install, как описано в Последние релизы Via Pip

Проблема заключается в том, что при установке pip этот путь easy_install - это Mac OS, предоставляемый easy_install в /usr/bin/easy_install, но он записывает в файл easy-install.pth в /Library/Python/2.7/site-packages/easy-install.pth и этот файл ссылается на Mac OS, предоставляемые библиотеками Python.

Затем установка возможна с помощью pip install ansible, после чего сообщает, что требование setuptools удовлетворено предоставленной Mac OS библиотекой Python в /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible требует setuptools, но не указывает версию. Другой зависимый пакет paramiko требует setuptools >= 11.3, но это, похоже, не проверяется при установке доступного через pip. Когда вы пытаетесь запустить программу, хотя она жалуется на то, что инструменты установки - это 1.1.6. Это версия setuptools, поставляемая с Mac OS, и теперь защищена SIP, поэтому ее нельзя обновить.

Вместо того, чтобы отключить SIP, я исправил это, удалив мой локальный Python, как показано на 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/ и установил его.

Это установил локальный питон и пип на /Library/Frameworks/Python.framework/Versions/2.7 и символические ссылки в /usr/local/bin, а также добавив /Library/Frameworks/Python.framework/Versions/2.7 к моему $PATH. Это позволяет хранить все отдельно от библиотек Mac OS в /System/Library/Frameworks/Python.framework и /usr/bin так что я получаю

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

Затем я установил возможность с помощью pip install ansible
Затем, когда я запускаю which ansible, я получаю

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

и в pip list

setuptools (28.8.0)
six (1.10.0)

и теперь это работает, потому что в Mac OS Python на новую установку не ссылаются.

Обратите внимание, что из-за установки установщика $PATH which python теперь /Library/Frameworks/Python.framework/Versions/2.7/bin/python и /usr/local/bin/python является символической ссылкой на это.
Если вы хотите использовать систему Python, вам придется использовать /usr/bin/python или изменить $PATH