Ответ 1
Это происходит из-за защиты целостности системы, введенной в OS X El Capitan.
Добавление --user python
в команду позволило это работать.
Другими словами
pip install --upgrade setuptools --user python
Я пытаюсь обновить 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
Как я могу это исправить?
Это происходит из-за защиты целостности системы, введенной в OS X El Capitan.
Добавление --user python
в команду позволило это работать.
Другими словами
pip install --upgrade setuptools --user python
Ответ заключается в том, что вы не можете обновлять setuptools в OSX для пиона factory, который поставляется с ОС. Причина в том, что файлы в /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
не могут быть удалены или изменены пользователем. Не только обычный пользователь, но даже если у вас есть права root, вы не сможете изменить эти файлы.
Конечно, вы можете использовать различные другие методы для установки более новой версии setuptools, но это не будет отменять системный пакет по умолчанию. Если вы идете по предложенному маршруту использования флага --user python
или вы хотите установить их без root в ~/Library
, они не будут переопределять версию системных файлов.
Причина, по которой вы или корень не можете изменить системные значения по умолчанию, объясняется ограничениями SIP-разрешений в El Capitan+. Вы можете отключить SIP, но это обычно не рекомендуется.
Вместо этого единственным разумным решением является использование виртуального виртуального питона.
Проблема заключается в конфликтующих библиотеках 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