Ubuntu 17.10中导入spaCy时出现undefined symbol: PyFPE_jbuf错误求助
undefined symbol: PyFPE_jbuf错误 这个错误我之前帮不少开发者排查过,本质就是spaCy的二进制安装包和当前使用的Python解释器版本不兼容——尤其是你用的Python 2.7,新版spaCy已经彻底放弃对它的支持了,很容易出现这类符号缺失的问题。先看看你的完整报错信息:
import spacy
Traceback (most recent call last):
File "", line 1, in
File "/usr/local/lib/python2.7/dist-packages/spacy/init.py", line 4, in
from .cli.info import info as cli_info
File "/usr/local/lib/python2.7/dist-packages/spacy/cli/init.py", line 1, in
from .download import download
File "/usr/local/lib/python2.7/dist-packages/spacy/cli/download.py", line 10, in
from .link import link
File "/usr/local/lib/python2.7/dist-packages/spacy/cli/link.py", line 7, in
from ..compat import symlink_to, path2str
File "/usr/local/lib/python2.7/dist-packages/spacy/compat.py", line 11, in...
给你几个靠谱的解决步骤,按顺序试:
先确认spaCy版本,安装Python2.7兼容的旧版
spaCy从v3.0开始就不再支持Python2.7,如果你装的是新版,肯定会报错。先查一下当前安装的版本:pip2 show spacy如果版本高于2.3.x,先卸载:
pip2 uninstall -y spacy然后安装最后一个支持Python2.7的稳定版:
pip2 install spacy==2.3.7清理残留的冲突文件
有时候系统里会残留不同环境安装的spaCy文件,导致加载混乱。可以手动删除旧的安装目录:sudo rm -rf /usr/local/lib/python2.7/dist-packages/spacy*删完之后再重新安装上面指定的版本。
用虚拟环境彻底隔离环境(推荐)
系统Python很容易和各种第三方包冲突,用虚拟环境是最稳妥的办法。先装virtualenv:sudo apt-get install python-virtualenv创建一个Python2.7的虚拟环境:
virtualenv -p python2.7 spacy_env激活虚拟环境:
source spacy_env/bin/activate在这个干净的环境里安装兼容版spaCy:
pip install spacy==2.3.7之后在这个环境里运行Python导入spaCy,基本不会再出问题。
补全系统依赖,避免编译错误
Ubuntu17.10的一些基础库可能不全,先装一下spaCy编译需要的依赖:sudo apt-get install build-essential python-dev libssl-dev libffi-dev装完这些再重新安装spaCy,能减少很多底层的编译问题。
内容的提问来源于stack exchange,提问作者Finn Årup Nielsen

