Linux【Ubuntu18.04】python3.7 导包报错ModuleNotFoundError: No module named ‘_bz2‘

报错情景

跑深度学习导包,导包如下:

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版本中尝试过没有出现报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值