Mac上pip install报“OSError: [Errno 1] Operation not permitted”是因SIP机制阻止写入/System、/usr等受保护路径;推荐用pip install --user绕过限制,并手动将~/.local/bin或~/Library/Python/x.x/bin加入PATH,或改用brew/python、pyenv、venv等用户可控环境。

Mac 上 pip install 报 OSError: [Errno 1] Operation not permitted 是 SIP 在拦你
这不是 pip 坏了,也不是网络或包的问题,而是 macOS 自 El Capitan(10.11)起启用的 System Integrity Protection(SIP)在阻止写入受保护路径,比如 /System、/usr、/bin。错误里出现 /System/Library/Frameworks/Python.framework/... 或 /usr/local/lib/python... 就是典型信号。
常见错误片段:OSError: [Errno 1] Operation not permitted: '/var/folders/.../pip-xxx-uninstall/System/Library/.../numpy-1.8.0rc1-py2.7.egg-info' —— pip 想删旧版 numpy 的元信息,但 SIP 不让碰 /System 下任何东西。
- 别用
sudo pip install硬刚:SIP 下sudo大概率仍失败,且污染系统 Python - 禁用 SIP 是高危操作:需进 Recovery Mode 运行
csrutil disable,重启后才能装,但会削弱系统安全,不推荐日常使用 - 系统自带 Python(如
/usr/bin/python3)基本不可靠:它被 SIP 锁死,也不该用来装第三方包
优先用 --user 安装,但必须配 PATH 才能调用命令
pip install --user xxx 是最稳妥的解法,它把包装进用户目录,完全绕过 SIP 限制。但装完后敲 black --version 或 httpie 报 command not found,是因为可执行脚本没进 PATH。
路径位置:
- macOS/Linux:
~/.local/bin/(纯 Python 包)或~/Library/Python/3.x/bin/(Homebrew/系统 Python 的 --user 输出) - Windows:
%APPDATA%\Python\PythonXX\Scripts\
验证是否装成功:python -m pip show xxx;查脚本位置:python -m pip show xxx | grep "Location",再往上两级就是 bin 或 Scripts 目录。
加进 PATH 示例(macOS/Linux):echo 'export PATH="$HOME/Library/Python/3.11/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
升级 pip 本身也得用 --user,否则必崩
pip install --upgrade pip 在 macOS/Linux 上大概率失败,因为 pip 正在运行自己,系统会锁住正在执行的二进制文件。Windows 同理,pip.exe 被占用无法覆盖。
正确做法只有这一条:python -m pip install --upgrade --user pip
升级后如果 pip --version 报错,但 python -m pip --version 正常,说明新 pip 已装好,只是 shell 没读到新路径 —— 回头补上 PATH 即可。别信“重装 Python”或“删 pip 文件”的野路子,那是把简单问题复杂化。
实在要全局安装?换一个不受 SIP 管控的 Python
如果你非得让 pip install xxx 直接生效(比如 CI 脚本、遗留项目),就别碰系统 Python。改用:
-
brew install python:Homebrew 安装的 Python 默认路径是/opt/homebrew/bin/python3,其site-packages和bin都在非 SIP 区域,pip install可直接写 -
pyenv install 3.12.5:所有版本都装在~/.pyenv下,彻底用户态,无权限干扰 - 虚拟环境:
python3 -m venv .venv && source .venv/bin/activate,激活后pip install默认装进.venv内部,天然隔离
注意:Homebrew 或 pyenv 安装的 Python,首次使用前务必确认 which python3 和 which pip 指向的是新路径,而不是 /usr/bin/python3 —— 否则一切白搭。
SIP 是 macOS 的底层防护机制,不是 bug。绕过它的“捷径”(比如关 SIP)反而会让后续维护更麻烦。真正省心的做法,是接受用户级安装 + 显式 PATH 管理,或直接切换到用户可控的 Python 运行时。


















