【Python】源码安装python后报错:ModuleNotFoundError: No module named ‘_lzma‘
本方法的解决方案同样适用于类似的报错,如:
ModuleNotFoundError: No module named ‘_bz’
等
问题原因:
Python 的 lzma 模块需要系统安装 liblzma-dev 开发包才能正确编译。当系统缺少此依赖时,编译过程会跳过 _lzma 模块的构建。
解决方案1:
1. 安装 LZMA 开发库
# Ubuntu/Debian
sudo apt update
sudo apt install -y liblzma-dev libbz2-dev# CentOS/RHEL
sudo yum install -y xz-devel bzip2-devel
2. 重新源码安装python
然后进入python的源码包重新安装部署:
./configure --prefix=/usr/local/python3
make && make install
如果原python源码包已不存在,则可以重新下载新的python包,并删除之前部署失败的python目录。例如:
wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz
解决方案2:
拷贝本地python的so库文件,然后拷贝到源码部署到python目录中。
要求:系统本地python的大版本(例如python3.8,python3.9)与源码编译的python一致。
1. 查询系统自带的LZMA 的so文件
终端输入:
find / -name “_lzma*.so”
然后找到/usr/lib前缀的那一条:
2. 然后拷贝到源码编译的python的库目录内
前面的so文件路径是第一步查询到的so库文件路径。
如果是ubuntu系统nvidia显卡配x86架构服务器,参考:
cp /usr/lib/python3.8/lib-dynload/_lzma.cpython-38-x86_64-linux-gnu.so /usr/local/python3/lib/python3.8/lib-dynload/_lzma.cpython-38-x86_64-linux-gnu.so
如果是麒麟银河系统altas显卡配x86架构服务器,参考:
cp /usr/lib/python3.8/lib-dynload/_lzma.cpython-38-x86_64-linux-gnu.so /usr/local/lib/python3.8/lib-dynload/_lzma.cpython-38-x86_64-linux-gnu.so