解决 mac OSX pip OSError: [Errno 1] Operation not permitted
这段时间在弄机器学习的事情,然后看Macbook里面的Python库有点旧,就用pip更新一下。结果抛出个异常。
问题
正常的包更新使用如下命令即可:
结果抛出下面这个异常报告
|
|
Step 1
Google后找到这个解决方案
|
|
首先说明一下我的电脑环境,
python2.0
是系统自带的,后续手动装了pyhton3.0
,相关pip
操作分别使用pip **
和pip3 **
区分。现打算把python2.0
下的scipy模块升级到最新版。上述方法执结果显示是成功了,但查看scipy模块版本时发现python2.0
下仍旧是旧版本,pyhton3.0
下却升级到最新版了。推测可能是因系统自带的Python2.0
受到SIP管理,上述方法执行时识别到此信息后就去更新python3.0
下的模块。因没有对不同环境做交叉验证,以上推理或许有误,但目前能解释我遇到的情况,权且如此。
Step 2
SIP
: 系统完整性保护System Integrity Protection。简单来讲就是更加强制性的保护系统相关的文件夹。开发者不能直接操作相关的文件内容。苹果官方的解释:
|
|
找到问题的原因就可以解决相关的问题了,解决问题的方法就是关闭Mac系统的“SIP“。
具体的操作步骤,引用国外的一个牛人给出的方法 :
|
|
翻译过来就是:
- 点击Mac电脑的苹果图标
- 选择 重新启动
- 按住 command+R,直到进入还原模式
- 选择实用工具,然后点击 终端
- 输入
csrutil disable
按下回车 - 重启电脑
这样就将“SIP“关闭了。
然后我们使用 pip 安装升级numpy、scipy等相关的包。
问题是解决了,但是如果到这里就认为已经万事大吉了,其实是大错特错了。苹果官方之所以设置“SIP“主要是考虑到系统的安全性问题。所以,我们最好还是将“SIP“打开。打开的方式如下:
- 点击Mac电脑的苹果图标
- 选择 重新启动
- 按住 command+R,直到进入还原模式
- 选择实用工具,然后点击 终端
- 输入
csrutil enable
按下回车 - 重启电脑
Step 3
再次执行第一步的升级命令,仍旧和之前一样的结果。SIP都关了,那就大胆的去做吧,找到scipy模块的path,手动删掉,再次执行命令,结果就OK了。
因多看了一眼刚打开的Finder界面,惊奇地发现没有scipy这个模块,再次把path显示出来发现和之前的路径已经不一样了。原来系统自带的模块和手动安装的模块不在一个路径下,至于为什么这样,留待以后再去想吧,毕竟目前的问题已经解决了。
|
|
|
|