Ubuntu python3.7 导包报错:No module named ‘_lzma’

1. 报错日志:No module named ‘_lzma’

源码安装的python,而且系统中没有安装lzma-dev包。

(1))、安装
sudo apt-get install liblzma-dev
pip3 install backports.lzma
(2)、修改lzma.py文件,该文件在python安装目录下,比如我在/usr/local/lib/python3.7下
from _lzma import *
from _lzma import _encode_filter_properties, _decode_filter_properties

#修改为

try:
    from _lzma import *
    from _lzma import _encode_filter_properties, _decode_filter_properties
except ImportError:
    from backports.lzma import *
    from backports.lzma import _encode_filter_properties, _decode_filter_properties
    

再次导包没有出现报错了!!

2. 报错日志:ModuleNotFoundError: No module named ‘_bz2‘问题解决

第一种方式

(1) 可以复制本机其他python版本的so文件

找到python3.8路径下的bz库文件,即“_bz2.cpython-38m-x86_64-linux-gnu.so”。

find / -name lib-dynload
ls /usr/lib/python3.8/lib-dynload/

(2)、cd到python3.7对应路径,复制该文件到当前目录下:

cd /usr/local/lib/python3.7/lib-dynload
sudo cp /usr/lib/python3.8/lib-dynload/_bz2.cpython-38m-x86_64-linux-gnu.so ./

(3)、修改文件名:“-38m"改为”-37m"

sudo mv _bz2.cpython-38m-x86_64-linux-gnu.so _bz2.cpython-37m-x86_64-linux-gnu.so

重新运行, 出现ImportError:_bz2.cpython-37m-x86_64-linux-gnu.so:invalid ELF header报错,原因应该是向下兼容的问题,我们就换为3.6,看第二种方式。

第二种方式

(1) 下载so文件:_bz2.cpython-37m-x86_64-linux-gnu.so
(2) 放在

sudo cp _bz2.cpython-37m-x86_64-linux-gnu.so /usr/local/lib/python3.7/lib-dynload

重新再导入就ok

你可能感兴趣的:([linux操作系统笔记],python,ubuntu,linux,python)