pip升级至10.0.1及pip3安装模块时异常问题求助
我之前在El Capitan上也碰到过一模一样的问题,折腾了好一阵才搞定,给你梳理下原因和可行的解决办法:
问题根源
这其实和El Capitan的**系统完整性保护(SIP)**脱不了关系:
- SIP会限制对系统级目录(比如
/Library/Python)的写入操作,而默认情况下pip会试图把包安装到这些受保护的目录里,哪怕你升级了pip,也绕不开这个限制。 - 系统自带的
six模块是旧版本,pip想要更新它的时候,因为SIP的保护没法覆盖系统文件,直接触发IO/OS Error。 - 另外El Capitan自带的Python版本偏老,升级pip后,新版本pip和系统自带的Python环境可能存在路径冲突,进一步加剧了报错。
可行的解决办法
1. 使用--user参数绕开系统目录(快速解决)
这个方法不需要改变现有环境,只需要在所有pip命令后加上--user,它会把包安装到你的用户目录(比如~/Library/Python/3.x/site-packages),完全避开SIP的限制:
- 先重新升级pip:
pip3 install --upgrade pip --user - 再处理six模块:
pip3 install --ignore-installed six --user - 之后安装新模块也记得加
--user:pip3 install 你的模块名 --user
2. 创建虚拟环境(推荐长期方案)
虚拟环境可以彻底隔离你的项目依赖和系统自带的Python环境,从根源上避免冲突:
- 先安装virtualenv(如果没装的话):
pip3 install virtualenv --user - 为你的项目创建一个虚拟环境:
virtualenv -p python3 my_project_env - 激活虚拟环境:
source my_project_env/bin/activate
激活后,你会看到终端提示符前多了(my_project_env)标识,这时候不管是升级pip还是安装任何模块,都是在这个独立环境里操作,不会碰系统文件,自然不会有报错。
3. 临时关闭SIP(不推荐)
如果你非要修改系统级的Python包,可以临时关闭SIP,但这个操作有一定风险,可能影响系统稳定性:
- 重启电脑,按住
Command + R进入恢复模式; - 打开终端,执行:
csrutil disable - 重启电脑,执行你需要的pip操作;
- 操作完成后,再次进入恢复模式,执行
csrutil enable重新开启SIP。
内容的提问来源于stack exchange,提问作者user669132
相关产品推荐
相关产品推荐

