在SSH连接的高校Linux服务器安装SpaCy的en_core_web_sm报PermissionError的原因及解决办法
错误原因
- 报错的根本原因就是你没有
/usr层级的管理员权限:日志最后一行明确显示安装程序尝试写入系统全局Python包路径/usr/local/lib/python3.6/dist-packages,普通用户对该路径没有写入权限。 - 此前安装其他包无问题的原因:你之前安装的包要么默认写入了你的用户级包路径
/home/jiayi/.local/lib/python3.6/site-packages(日志显示你已安装的spacy本身就存放在这个路径下),要么你手动加了--user参数,或是使用虚拟环境时pip默认写入虚拟环境私有路径,不会触发系统路径写入请求。而spacy download命令默认调用pip时没有自动加--user参数,才会尝试写入系统路径触发权限报错。
可自行操作的替代方案(无需联系管理员)
- 给download命令追加--user参数
执行命令:
python3 -m spacy download en_core_web_sm --user
该命令会要求pip将模型包写入你的用户级私有包路径,和已安装的spacy适配,安装完成即可直接调用。
- 直接用pip安装对应版本模型包
你本次需要的是3.1.0版本的en_core_web_sm,直接执行pip安装命令即可,效果和spacy download完全一致:
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.1.0/en_core_web_sm-3.1.0-py3-none-any.whl --user
- 使用虚拟环境安装
如果你平时使用virtualenv管理环境,激活对应虚拟环境后再执行python3 -m spacy download en_core_web_sm即可,虚拟环境下pip默认写入虚拟环境内部目录,你拥有完全写入权限,不会触发权限报错。
验证方法
安装完成后执行以下命令,正常输出「加载成功」即说明安装生效:
python3 -c "import spacy; nlp = spacy.load('en_core_web_sm'); print('加载成功')"
内容的提问来源于stack exchange,提问作者Goh Jia Yi
相关产品推荐
相关产品推荐

