OSX El Capitan에서 setuptools 업그레이드


81

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

어떻게 고칠 수 있습니까?


2
해결책은 없지만 설명이 있습니다. 아마도 새로운 시스템 무결성 보호 때문일 것입니다 . pip는 더 이상 허용되지 않는 항목을 수정하려고합니다 sudo. 이 질문을 참조하십시오 . 아직 시간이 걸리지 않았습니다. --userPIP에 대한 옵션은 내가 조사했던 것과 아마. 모든 것을 "업데이트"하는 실용적인 솔루션을 찾으면 공유하십시오!
아서

ipdb연결된 오류 가 발생합니다 setuptools. setuptools 업그레이드가 작동하지 않습니다. 작동 --user=python하지만 여전히 ipdb 오류를 수정하지는 않습니다.
R11G

답변:


189

이는 OS X El Capitan에 도입 된 시스템 무결성 보호로 인해 발생합니다.

--user python명령에 추가하면 작동합니다.

다시 말해

pip install --upgrade setuptools --user python

2
pip(과 달리 easy_install) sudo가 필요하지 않습니다. python사용자를 사용하게했기 때문에 작동하는지 확인했습니다.
Kof

1
Docker 컨테이너 내부의 CentOS 7에서도 작동합니다. 어떤 이유로 실패했습니다 (2016 년 5 월 이전에이 단계없이 정확히 동일한 설정이 작동했지만 ...)
geerlingguy

2
나는 그것을 작동시킬 수 없었고 --user 옵션이 어떻게 작동 해야하는지 이해하지 못했습니다. 나를 위해 일한 것은 (ipython 설치와 관련하여) setuptools를 업그레이드하는 동안 일시적으로 시스템 무결성 보호를 비활성화 한 다음 나중에 다시 활성화하는 것이 었습니다. 이렇게하려면 복구 모드 (cmd + R)로 부팅하고 터미널을 시작한 다음을 입력 csrutil disable합니다. 재부팅하고 업그레이드 후 복구 모드로 재부팅하고 csrutil enable. 재부팅 후에도 ipython은 계속해서 잘 작동했습니다.
Grav

이 명령을 성공적으로 실행할 수 있지만 업데이트가 수행되지 않습니다. 출력은 다음과 같습니다.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
diidu

마침내 여기에 제공된 지침에 따라 작업을 수행 할 수있었습니다. apple.stackexchange.com/questions/209572/…
diidu

2

개요

문제는 시스템 Python 라이브러리를 보호하는 Mac OS의 시스템 무결성 보호 (SIP)와 결합 된 Python 라이브러리 충돌입니다.

내 생각에 가장 좋은 해결책은 Python 설치를 제거하고 다시 설치하고 SIP로 보호되는 Mac OS에서 제공하는 Python 라이브러리와 별도로 유지하는 것입니다.

SIP가 향후 Mac OS 릴리스의 일부가 될 것으로 예상하고 SIP가 여기서 원인이 아니라 충돌하는 Python 라이브러리 문제를 노출하기 때문에 SIP를 비활성화하는 것이 좋습니다.

세부

나는 또한 ansible을 설치하려고 시도하는이 문제가있었습니다.

내 문제는 Mac OS에 대한 ansible 설치 지침을 따랐을 때 시작되었습니다. 이는 pip를 통해 설치하고 Pip를 통한 최신 릴리스에easy_install 설명 된대로 pip를 설치하는 것입니다.

이런 식으로 핍 설치할 때 문제는이 easy_install맥 OS가 제공됩니다 easy_install/usr/bin/easy_install있지만에 기록 easy-install.pth에서 파일 /Library/Python/2.7/site-packages/easy-install.pth및 해당 파일 참조 맥 OS 파이썬 라이브러리를 제공했다.

이후에 ansible을 설치하면 Ansible pip install ansible에서 Python 라이브러리를 제공하는 Mac OS가 setuptools 요구 사항을 충족한다고보고 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
하지만 setuptools가 필요하지만 버전을 지정하지 않습니다. 다른 종속 패키지 인 paramiko에는 setuptools> = 11.3이 필요하지만 pip를 통해 ansible을 설치할 때 확인되지 않는 것 같습니다. 설치 도구가 1.1.6이라고 불평하지만 ansible을 실행하려고 할 때 이것은 Mac OS에서 제공하는 setuptools 버전이며 현재 SIP로 보호되므로 업그레이드 할 수 없습니다.

SIP를 비활성화하는 대신 https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython에 힌트 된대로 로컬 Python을 제거한 다음 다시 다운로드하고 설치 하여이 문제 를 해결했습니다.

당신은 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

그런 다음 https://www.python.org/downloads/ 에서 Mac OS X 용 2.7.13 설치 프로그램 패키지를 다운로드하여 설치했습니다.

이것은 로컬 파이썬과 pip를 설치 /Library/Frameworks/Python.framework/Versions/2.7했고 심볼릭 링크 를 내 $ PATH /usr/local/bin앞에 추가 /Library/Frameworks/Python.framework/Versions/2.7했습니다. 이것은 맥 OS에서 별도의 모든 것을에서 라이브러리를 제공 유지 /System/Library/Frameworks/Python.framework하고 /usr/bin 내가 얻을

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

pip install ansible
그런 다음 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 라이브러리가 새 설치에서 참조되지 않기 때문에 ansible이 이제 저에게 적합합니다.

설치 프로그램이 $ PATH를 설정했기 때문에 which python현재 /Library/Frameworks/Python.framework/Versions/2.7/bin/python이고 이것 /usr/local/bin/python에 대한 심볼릭 링크입니다.
시스템 파이썬을 원한다면 / usr / bin / python을 사용하거나 $ PATH를 변경해야합니다.


1

대답은 OS와 함께 제공되는 공장 Python 용 OSX에서 setuptools를 업데이트 할 수 없다는 것입니다. 그 이유는 사용자가의 파일을 /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python제거하거나 수정할 수 없기 때문입니다. 일반 사용자뿐만 아니라 루트 권한이 있어도 해당 파일을 수정할 수 없습니다.

물론 다양한 다른 방법을 사용하여 최신 버전의 setuptools를 설치할 수 있지만 이것이 기본 시스템 패키지를 재정의하지는 않습니다. 즉, --user python플래그 를 사용하는 제안 된 경로로 이동 하거나 루트없이에 설치하도록 선택 ~/Library하면 시스템 파일 버전이 무시되지 않습니다.

사용자 또는 루트가 시스템 기본값을 수정할 수없는 이유는 El Capitan +의 SIP 권한 제한 때문입니다. SIP를 비활성화 할 수 있지만 일반적으로 권장되지 않습니다.

대신 유일하게 합리적인 해결책은 python virtualenv를 사용하는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.