【问题标题】:Cannot "sudo pip uninstall" operation not permitted (/tmp) in OS X El Capitan无法在 OS X El Capitan 中执行“sudo pip uninstall”操作(/tmp)
【发布时间】:2016-05-05 03:28:54
【问题描述】:

前言:我的 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-ing 任何引起投诉的目录(例如,~/Library/Caches/pip 及其一些父母和子女)。由于某种原因,我不能chown 最有问题的目录,/tmp

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

4) 最后,我尝试从列表的下方手动卸载一个包,瞧,我可以轻松地执行sudo pip uninstall virtualenv 之类的操作。尝试手动卸载 altgraph 会导致上述相同的错误。

任何想法如何进行?记住,我不关心任何一个包;我只想使用 Homebrew 的 Python 核对 pip 并从头开始。谢谢!

更新:

  1. 手动查看列表,bdist-mpkg-0.5.0 也会发生同样的事情
  2. 还有一些:matplotlibzope.interfacexattrsixscipypytz

【问题讨论】:

    标签: macos python-2.7 pip


    【解决方案1】:

    不要使用 Homebrew 或 MacPorts,也不要使用 macOS 的预装 Python。这些嵌套的解决方案最终会以某种方式失败(PEP 20:扁平比嵌套更好)。至少,您将不得不等待 PyPI 更新传播到 MacPorts 或 Homebrew,或者回退到使用 pip

    使用 MacPorts 仅安装需要编译和自定义的非 Python 项目(例如,ATLAS)。

    最简单的做法是从python.org 安装一个独立的 Python(来自二进制发行版或从源代码构建)。我建议从源代码 (example) 构建 CPython。

    不需要sudo,安装在您的用户下。那么:

    pip install -U pip setuptools virtualenvwrapper
    

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

    【讨论】:

    • 谢谢Γιάννη。我一直想开始使用virtualenv 有一段时间了;这个问题可能是我需要的推动力。我深入研究这个烂摊子的动机主要来自尝试在 OS X 上安装 ROS (github.com/mikepurvis/ros-install-osx)。使用virtualenv 可能有一种方法可以做到这一点,但我一直按照说明进行操作。
    • 我认为我曾经通过 MacPorts 安装过 ROS,但如果我再次安装,那么我更喜欢从源代码安装。对于每件事,第一次从源代码构建可能需要一些时间,但随后可以使用 bash 脚本自动完成。
    【解决方案2】:

    我很确定brew reinstall python 以某种方式解决了我遇到的一些问题。然后我还不得不在/usr/local/lib/python2.7/site-packages 中核对(即rm -rf)一些东西

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

    【讨论】:

    • 我在安装 ROS 时遇到了完全相同的问题。这有帮助,谢谢!
    • 你必须从 site-packages 中删除什么?
    • 我不记得 Lenar,抱歉。我想我删除了pip没有放在那里的东西
    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 2017-05-23
    • 2016-11-02
    • 2017-02-27
    • 2016-01-01
    • 2016-01-27
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多