报错情景
跑深度学习导包,导包如下:
from datasets import load_dataset, load_metric
出现以下报错日志
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-803e0a4cdba7> in <module>
1 #PREPARE DATA
----> 2 from datasets import load_dataset, load_metric
3 #LOAD PRE-TRAINED MODEL ON ASR
4 from transformers import AutoConfig
/usr/local/lib/python3.7/site-packages/datasets/__init__.py in <module>
35 del version
36
---> 37 from .arrow_dataset import Dataset, concatenate_datasets
38 from .arrow_reader import ReadInstruction
39 from .builder import ArrowBasedBuilder, BeamBasedBuilder, BuilderConfig, DatasetBuilder, GeneratorBasedBuilder
/usr/local/lib/python3.7/site-packages/datasets/arrow_dataset.py in <module>
49 )
50
---> 51 import fsspec
52 import numpy as np
53 import pandas as pd
/usr/local/lib/python3.7/site-packages/fsspec/__init__.py in <module>
10 from . import _version, caching
11 from .callbacks import Callback
---> 12 from .compression import available_compressions
13 from .core import get_fs_token_paths, open, open_files, open_local
14 from .exceptions import FSTimeoutError
/usr/local/lib/python3.7/site-packages/fsspec/compression.py in <module>
1 """Helper functions for a standard streaming compression API"""
----> 2 from bz2 import BZ2File
3 from zipfile import ZipFile
4
5 import fsspec.utils
/usr/local/lib/python3.7/bz2.py in <module>
17 from threading import RLock
18
---> 19 from _bz2 import BZ2Compressor, BZ2Decompressor
20
21
ModuleNotFoundError: No module named '_bz2'
可以发现是import bz2时,bz2.py里import _bz2时没有找到模块,我尝试直接import bz2,python有bz2这个库,但是会出现同样的报错信息。查看众多博客和他人的解决方法后,终于成功解决这个该问题。
解决方法
1、安装bzip,实际上我没有执行这一步,一是一直install失败,
二是我已有bz2这个库,猜测不需要再安装编译,所以跳过后最后也成功解决了。同样参考博客
也说到,这样方法很大概率不成功。
sudo apt install bzip2-devel
在python安装目录下重新编译(我也没有做,因为没找到./configure)
./configure --with-ssl
make && make install
赶时间直接看这👇
2、找到_bz2.cpython-37m-x86_64-linux-gnu.so文件 如果在机器上没有的话,可以到这里下载:
链接:https://pan.baidu.com/s/1GzUY4E0G2yVUfqxHOIzn1A
提取码:oiwh
也可以直接下载,但是我下载完后重新运行, 出现ImportError:_bz2.cpython-37m-x86_64-linux-gnu.so:invalid ELF header报错, 原因大概是该路径下的.so文件与运行程序的环境不匹配,比如在mac电脑上编译生成的.so文件,直接放到linux服务器上跑了,自然会有错误。
wget https://github.com/zyl-fun/pic/blob/master/mybook/_bz2.cpython-37m-x86_64-linux-gnu.so
3、找到最终放_bz2.cpython-37m-x86_64-linux-gnu.so的文件夹
比如我的路径是/usr/local/lib/python3.7/lib-dynload
find / -name lib-dynload
4、将下载的so文件放入lib-dynload文件夹,并修改名称,增加执行权限
我的python版本是3.7,得把文件名改为37m,并拷贝到python3的安装目录
mv _bz2.cpython-36m-x86_64-linux-gnu.so _bz2.cpython-37m-x86_64-linux-gnu.so
cp _bz2.cpython-37m-x86_64-linux-gnu.so /usr/local/python3/lib/python3.7/lib-dynload/
重新再导入就成功啦!!
当然,还有一个更简单粗暴的方法,就是直接换一个python版本,我在3.8版本中尝试过没有出现报错。