升级OSX El Capitan上的setuptools
我正在尝试升级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
我该如何解决?
这是由于OS X El Capitan中引入的系统完整性保护。
添加 – 用户--user python
的命令允许这个工作。
换一种说法
pip install --upgrade setuptools --user python
答案是,你不能更新OSX上的工厂python的setuptools。 原因是/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
中的文件不能被用户删除或修改。 不仅是普通用户,即使你有root权限,你也将无法修改这些文件。
当然,您可以使用其他各种方法来安装较新版本的setuptools,但这不会覆盖默认的系统软件包。 这意味着如果你使用了build议的使用方式--user python
标志,或者你select在没有root的情况下把它们安装到~/Library
,它们将不会覆盖系统文件的版本。
您或root无法修改系统默认值的原因是由于El Capitan +中的SIP权限限制。 您可以禁用SIP,但通常不build议这样做。
相反,唯一合理的解决scheme是使用python virtualenv。
概观
问题在于Python库与系统完整性保护(SIP)在Mac OS上相结合,从而保护系统Python库。
我认为最好的解决scheme是卸载并重新安装自己的Python安装,并将其与由受OS保护的Mac OS提供的Python库分开。
我赞成这样做,因为我希望SIP成为未来Mac OS发行版的一部分,而SIP在这里并不是原因,只是暴露了Python库冲突的问题。
细节
我也有这个问题试图安装ansible。
当我按照Mac OS的安装说明进行操作时,我的问题就开始了,它是通过pip进行安装,并使用easy_install
安装pip,如最新版本中所述
问题是这样安装pip时, easy_install
是在/usr/bin/easy_install
提供的easy_install
上的Mac OS,但它写入/Library/Python/2.7/site-packages/easy-install.pth
上的easy-install.pth
文件/Library/Python/2.7/site-packages/easy-install.pth
,该文件引用了Mac OS提供的Python库。
随后安装ansible与pip install ansible
然后报告setuptools的要求满足的Mac OS提供的Python库在/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
系统/库/ /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Ansible需要setuptools,但不指定版本。 另一个依赖软件包paramiko需要setuptools> = 11.3,但是在安装通过pip安装时没有检查。 当您尝试运行安德鲁,虽然它抱怨设置工具是1.1.6这是Mac OS提供的setuptools的版本,现在由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
然后我从https://www.python.org/downloads/下载了适用于Mac OS X的2.7.13安装程序包并安装了它。
这在/Library/Frameworks/Python.framework/Versions/2.7
安装了一个本地python和pip,在/usr/local/bin
安装了符号链接,以及将/Library/Frameworks/Python.framework/Versions/2.7
添加到我的$ PATH。 这使得一切与Mac OS提供的库在/System/Library/Frameworks/Python.framework
和/usr/bin
中/System/Library/Frameworks/Python.framework
,这样我就可以得到
which pip /Library/Frameworks/Python.framework/Versions/2.7/bin/pip
然后,我安装安装可靠的pip install 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