文章目录
问题描述
在容器中运行一个开源软件,容器内的python是从源码安装的,在python代码中有import lzma,报错:ModuleNotFoundError: No module named ‘lzma’。
笔者先是尝试用pip安装相应的python模块,但是安装之后,还是报错。于是找了网上的方案,有几类,尝试了其中一种。
注意
:在解决问题的过程中,发现CentOS 7和CentOS 8 的解决方案可能略有不同,下面的方案是在
CentOS 7
上测试通过的。
解决方案
如果你的python是从源码安装的,需要在安装python之前,先安装系统依赖。
yum install -y xz-devel mesa-libGL python-backports-lzma
有些答案说只需要安装
xz-devel
。
如果你使用的python版本低于3.3,需要额外安装python依赖。
pip install backports.lzma
再多了解一点
lzma提供了什么功能呢?
LZMA压缩是一种数据压缩算法。它由
Igor Pavlov
设计,作为
7z
项目的一部分,于1998年首次使用。“LZMA”代表“Lempel-Ziv-Markov chain-Algorithm”。这种压缩算法具有更高的压缩率。
python是否自带lzma模块呢?
从
python 3.3
开始,
lzma
就是python自带的模块了。
虽然python 3.3+自带lzma模块,可是如果你是从源码安装的python,而且系统中没有安装
lzma-dev
包,那么就不会安装lzma模块。
此模块提供用于使用 LZMA 压缩算法压缩和解压缩数据的类和便利函数。还包括一个文件接口,支持 xz 实用程序使用的 .xz 和旧版 .lzma 文件格式,以及原始压缩流。
⚠️注意
此模块提供的接口与 bz2 模块的接口非常相似。请注意,
LZMAFile
和
bz2.BZ2File
不是线程安全
的,因此,如果您需要从多个线程使用单个 LZMAFile 实例,则必须使用锁对其进行保护。
如何在python中使用lzma呢?
打开一个压缩文件。
import lzma
with lzma.open("file.xz") as f:
file_content = f.read()
创建一个压缩文件。
import lzma
data = b"Insert Data Here"
with lzma.open("file.xz", "w") as f:
f.write(data)
低版本python如何操作lzma文件呢?
只需要安装
backports.lzma
。
关于lzma压缩文件的格式和后缀
一个具有
.lzma
扩展的文件是使用lzma压缩方法创建的存档文件。
LZMA
是一种旧的文件格式,已经被替换为
.xz
格式。.lzma文件的MIME类型
applicaiotn/x-lzma
。