在容器中运行一个开源软件,容器内的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压缩是一种数据压缩算法。它由Igor Pavlov
设计,作为7z
项目的一部分,于1998年首次使用。“LZMA”代表“Lempel-Ziv-Markov chain-Algorithm”。这种压缩算法具有更高的压缩率。
从
python 3.3
开始,lzma
就是python自带的模块了。
虽然python 3.3+自带lzma模块,可是如果你是从源码安装的python,而且系统中没有安装lzma-dev
包,那么就不会安装lzma模块。
此模块提供用于使用 LZMA 压缩算法压缩和解压缩数据的类和便利函数。还包括一个文件接口,支持 xz 实用程序使用的 .xz 和旧版 .lzma 文件格式,以及原始压缩流。
⚠️注意
此模块提供的接口与 bz2 模块的接口非常相似。请注意,LZMAFile
和 bz2.BZ2File
不是线程安全
的,因此,如果您需要从多个线程使用单个 LZMAFile 实例,则必须使用锁对其进行保护。
打开一个压缩文件。
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)
只需要安装backports.lzma
。
一个具有.lzma
扩展的文件是使用lzma压缩方法创建的存档文件。LZMA
是一种旧的文件格式,已经被替换为.xz
格式。.lzma文件的MIME类型applicaiotn/x-lzma
。