我和安装spacy的故事

本文记录我在使用spacy时遇到的问题,以及解决方案。如果没时间,而只是找spacy安装方案,只看粗体字部分及最后的总结。

一个NLP工程,requirements.txt里有spacy。 pip install -r requirements.txt很顺利。运行起来报错:
spacy.load en…。解决方法是安装en,并且和spacy关联。

如果网络连接世界,python -m spacy download en可以顺利安装en并关联。然而无情的现实是超时,而且无解。
(中国的科技人员什么加班多产出少,因为我们的时间浪费在下载各种依赖上这种本不应该浪费时间的琐事上)

我的OS网络不能连接世界。

只能考虑手动安装(官网上的离线方式):
https://spacy.io/usage/models/#download
从github上下载en_core_web_sm-2.2.5.tar.gz。(为什么是-sm呢?因为虽然python -m spacy download en执行结果失败,但是从打印日志看出它要干的是下载sm)下载的速度也很慢,好在只有11Mb,还可以用迅雷。

根据上面的网址,python -m spacy download en干这么几件事:1. 下载en;2. 使用pip安装 3. 建立spacy和en的soft link。

因此我从网上找到的三种方法:

  1. 解压缩后进入到源码,python setup.py install
  2. 不要解压缩,pip install /full/path/to/downloaded/en_core_web_sm-2.2.5.tar.gz
  3. 因为spacy download en使用pip安装,所以先下载一个pip(第一步curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py 第二步python get-pip.py #安装pip 20版本 第三步python -m spacy download en # 下载和关联en_core_web_sm==2.1.0)

第一种方法:
setup.py文件如果在windows上使用,需要删除最上面的:

#!/usr/bin/env python
# coding: utf-8

第二种方法:
压缩文件在windows要使用绝对路径,相对路径会报文件不存在。由于en模块要求的spacy版本高于我本地之前安装的,所以
pip install --upgrade spacy==2.2.2
罗嗦一句,最开始我安装的是2.2.4,然而安装过程中报错(好像是一个no module named glob)。所以我用2.2.2

第三种方法:
因为get-pip.py会产生一个baseN(N是多少我忘了)编码的二进制pip安装文件,python get-pip.py实际上是安装最新版本的pip (20以上版本),而这会导致一个严重的问题:
pip 20版本有bug,且从19年2月至今未修复好。这个bug会导致在使用virtualenv + setuptools (即使版本高达47)时,报如下错误:

 File "", line 985, in _gcd_import
  File "", line 968, in _find_and_load
  File "", line 955, in _find_and_load_unlocked
ImportError: No module named 'setuptools.build_meta'

详见https://github.com/pypa/pip/issues/6264
此外,pip指定源的配置文件pip.ini,并不一定都是在%HOMEPATH%\pip\pip.ini(配错了不会生效),正确位置用pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple命令执行输出的日志看到(当我看到配置了pip\pip.ini中的国内源依然下载超慢的时候,我绝望了一秒)

我从未见过一种语言,有这么恶心的版本问题,却还有这么多用户说它新人友好的…
另外,说python必须说版本:
spacy 2.2.2
en_core_web_sm 2.2.5
pip: 19.0.3
python: 3.5.2
virtualenv:

安装完en_core_web_sm,执行python -m spacy download en 完成关联
总结:

  1. 从github上下载en_core_web_sm-2.2.5.tar.gz
  2. pip install --upgrade spacy==2.2.2
  3. pip install /full/path/to/downloaded/en_core_web_sm-2.2.5.tar.gz
  4. python -m spacy download en

我和安装spacy的故事_第1张图片

你可能感兴趣的:(python)