我正在尝试升级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
我该如何解决?
答案 0 :(得分:186)
这是因为OS X El Capitan中引入了系统完整性保护。
在命令中添加--user python
可以使其正常工作。
换句话说
pip install --upgrade setuptools --user python
答案 1 :(得分:2)
问题在于Python库存在冲突,并且与Mac OS上的系统完整性保护(SIP)相结合,可以保护系统Python库。
我认为最好的解决方案是卸载并重新安装自己的Python安装,并将其与Mac OS提供的受SIP保护的Python库分开。
我倾向于禁用SIP,因为我希望SIP成为未来任何Mac OS版本的一部分而SIP不是这里的原因,它只是暴露了冲突的Python库的问题。
我也有这个问题试图安装ansible。
当我按照Mac OS的ansible安装说明进行操作时,我的问题就出现了,这是通过pip安装并使用easy_install
安装pip,如Latest Releases Via Pip所述
问题是以这种方式安装pip时,easy_install
是easy_install
在/usr/bin/easy_install
提供的easy-install.pth
,但它会在/Library/Python/2.7/site-packages/easy-install.pth
处写入pip install ansible
文件该文件引用了Mac OS提供的Python库。
随后使用/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
安装ansible,然后在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
处报告Mac OS提供的Python库满足setuptools要求
Ansible需要setuptools但不指定版本。另一个依赖包,paramiko,需要setuptools> = 11.3,但在通过pip安装ansible时似乎没有检查过。当你试图运行ansible虽然它抱怨安装工具是1.1.6这是随Mac OS提供的setuptools版本,现在受SIP保护,所以它无法升级。
我没有禁用SIP,而是通过卸载我的本地Python来修复此问题,如https://docs.python.org/2.7/using/mac.html#getting-and-installing-macpython所暗示的那样。 然后再次下载和安装。
如果你关心rm,你可以用mv代替 要卸载我做了
/Library/Frameworks/Python.framework/Versions/2.7
然后我从https://www.python.org/downloads/下载了适用于Mac OS X的2.7.13安装程序包 并安装它。
这在/usr/local/bin
安装了一个本地python和pip,在/Library/Frameworks/Python.framework/Versions/2.7
安装了符号链接,并在我的$ PATH中添加了/System/Library/Frameworks/Python.framework
。这使得所有内容与/usr/bin
和which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip
上的Mac OS提供的库分开
所以我得到了
pip install ansible
然后我用which ansible
安装了ansible
然后,当我运行/Library/Frameworks/Python.framework/Versions/2.7/bin/ansible
时,我得到了
pip list
并在setuptools (28.8.0)
six (1.10.0)
which python
和ansible现在适用于我,因为新安装没有引用Mac OS Python库。
请注意,由于安装程序设置为$ PATH,/Library/Frameworks/Python.framework/Versions/2.7/bin/python
现在为/usr/local/bin/python
,constexpr size_t NumCars = 5;
是符号链接。
如果你想要系统Python,你必须使用/ usr / bin / python或更改$ PATH
答案 2 :(得分:1)
答案是您无法在OSX上为OS附带的工厂python更新setuptools。原因是用户无法删除或修改/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
中的文件。不仅是普通用户,而且即使您拥有root权限,也无法修改这些文件。
当然,您可以使用其他各种方法来安装较新版本的setuptools,但这不会覆盖默认的系统包。这意味着如果您使用建议的使用路径--user python
标志,或者您选择在没有root的情况下将它们安装到~/Library
,这些将不会覆盖系统文件版本。
您或root无法修改系统默认值的原因是由于El Capitan +中的SIP权限限制。您可以禁用SIP,但通常不建议这样做。
相反,唯一合理的解决方案是使用python virtualenv。