在OS X El Capitan中,无法执行"sudo pip uninstall"操作不允许(/tmp)。

7
前言:我的OS X Python安装非常混乱。在我发现Homebrew之前,我一直使用系统Python。因此,我一直在使用sudo pip install。现在我正在尝试清理所有内容,然后针对Homebrew的Python安装/链接pip包。
1)在许多SO答案中,人们建议执行:pip freeze | xargs sudo pip uninstall -y。但这对我不起作用。我得到了一个非常长的回溯。这些是其中最具代表性的块:
~ $ pip freeze | xargs sudo pip uninstall -y
You are using pip version 7.1.2, however version 8.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
The directory '/Users/smaniato/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Uninstalling altgraph-0.10.2:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip/basecommand.py", line 211, in main
[...]
Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/altgraph/__init__.py', '/tmp/pip-p8yIlU-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/altgraph/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-p8yIlU-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/altgraph/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/altgraph/__init__.pyc', '/tmp/pip-p8yIlU-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/altgraph/__init__.pyc',
[...]
"[Errno 1] Operation not permitted: '/tmp/pip-p8yIlU-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/altgraph'")]

其中altgraph只是pip list中第一个pip包(请记住这一点)。

2) 然后我尝试了pip freeze | xargs sudo -H pip uninstall -y,如警告所示,但那只是移除了警告。错误消息仍然存在。

3) 我还尝试了将引起投诉的任何目录进行chown操作(例如,〜/Library/Caches/pip及其某些父目录和子目录)。由于某种原因,我无法对最棘手的目录/tmp进行chown操作:

~ $ sudo chown -R ${USER} /tmp
chown: /tmp: Operation not permitted

4) 最后,我尝试手动从列表下方卸载一个软件包,然后就可以轻松执行例如 sudo pip uninstall virtualenv。手动卸载altgraph也会导致上述错误。

有什么建议吗?请记住,我不关心任何一个包;我只想彻底清除pip并使用Homebrew的Python重新开始。谢谢!

更新:

  1. 逐个向下滚动列表,使用bdist-mpkg-0.5.0时会发生相同的情况
  2. 还有几个:matplotlibzope.interfacexattrsixscipypytz
2个回答

13

我相信brew reinstall python在某种程度上解决了我遇到的许多问题。然后我还必须清除(即rm -rf/usr/local/lib/python2.7/site-packages中的一些内容。

这与我的特定使用情况有关的问题和答案(在OS X上安装ROS):https://github.com/mikepurvis/ros-install-osx/issues/11


1
当我安装ROS时,我遇到了完全相同的问题。这很有帮助,谢谢! - Tormod Haugene
你需要从 site-packages 中移除什么? - Lenar Hoyt
我不记得Lenar,对不起。我认为我删除了那些不是由pip放置的东西。 - Spyros Maniatopoulos

1
不要使用Homebrew或MacPorts,也不要使用macOS预装的Python。这些都是嵌套的解决方案,最终会以某种方式失败(PEP 20:扁平比嵌套更好)。至少,您将不得不等待PyPI更新传播到MacPorts或Homebrew,或者退回使用pip
仅使用MacPorts安装需要编译和自定义的非Python项目(例如ATLAS)。
最简单的方法是从python.org安装独立的Python(可以从二进制分发版安装,也可以从源代码构建)。我建议从源代码构建CPython(example)。
不需要sudo,在您的用户下安装即可。然后:
pip install -U pip setuptools virtualenvwrapper

根据文档,从您的~/.bashrc中获取您的包装器,然后执行mkvirtualenv foo。所有其他工作都将仅在虚拟环境中执行。


谢谢,Γιάννη。我一直想开始使用virtualenv,这个问题可能是我需要的推动力。我深入研究这个问题的动力主要来自于在OS X上安装ROS的尝试(https://github.com/mikepurvis/ros-install-osx)。也许有一种方法可以使用`virtualenv`来完成这个任务,但我完全按照指示进行操作。 - Spyros Maniatopoulos
1
我记得曾经通过MacPorts安装过ROS,但如果我再次这样做,我更喜欢从源代码安装。对于每个东西,第一次从源代码构建可能需要一些时间,但可以使用bash脚本自动化。 - 0 _

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接