SpaCy 'en'模型加载失败:已下载仍无法加载的技术求助
解决SpaCy找不到'en'模型的问题
我遇到了SpaCy的OSError:找不到'en'模型,尽管已经执行了下载命令但还是无法加载。相关操作命令及输出如下:
[jalal@goku entity-sentiment-analysis]$ which python /scratch/sjn/anaconda/bin/python [jalal@goku entity-sentiment-analysis]$ sudo python -m spacy download en [sudo] password for jalal: Collecting https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz (37.4MB) 100% |█████...
我帮你分析下这个问题的根源,再给出几个可行的解决办法:
问题根源
你当前使用的Python是conda环境中的版本(路径为/scratch/sjn/anaconda/bin/python),但你用sudo python -m spacy download en下载模型时,sudo会切换到系统默认的Python解释器,导致模型被安装到了系统Python的依赖目录里,而不是你正在使用的conda环境路径下。这就造成了你的conda环境中的SpaCy找不到已经下载的模型。
解决方案
方法1:用当前conda环境的Python直接下载(推荐)
先确保你激活了对应的conda环境:
- 如果你用的是conda 4.4及以上版本,运行:
conda activate <你的环境名> - 老版本conda运行:
source activate <你的环境名>
激活环境后,直接运行以下命令(不要加sudo):
python -m spacy download en
这样模型会直接安装到当前conda环境的依赖路径中,SpaCy就能正常加载了。
方法2:手动链接模型到conda环境
如果你已经用sudo下载了模型,可以手动把模型链接到conda环境的SpaCy数据目录:
- 先找到系统Python下的模型安装路径:
sudo python -c "import spacy; print(spacy.util.get_package_path('en_core_web_sm'))"
- 再找到你的conda环境的SpaCy数据目录:
python -c "import spacy; print(spacy.util.get_config_path().parent / 'data')"
- 创建软链接(把下面的路径替换成你实际得到的路径):
ln -s /usr/lib/pythonX.Y/site-packages/en_core_web_sm /scratch/sjn/anaconda/lib/pythonX.Y/site-packages/spacy/data/en
方法3:代码中直接使用完整模型名
如果不想折腾路径,也可以在代码里直接加载模型的完整名称,跳过别名匹配:
import spacy nlp = spacy.load("en_core_web_sm")
因为en其实是en_core_web_sm的别名,有时候别名没有正确创建,直接用全名就能正常加载。
内容的提问来源于stack exchange,提问作者Mona Jalal
相关产品推荐
相关产品推荐

