在Flatpak中使用py7zr提取7z压缩包遇依赖问题求助
Flatpak环境下py7zr依赖问题的解决方法
问题概述
开发Linux模组管理器时,在Flatpak环境中使用py7zr提取7z包遇到依赖冲突:
- 常规生成依赖后构建,提示找不到满足要求的
backports.zstd>=1.0.0版本 - 手动添加该依赖后,又出现pyppmd版本元数据不一致问题(安装包标注1.3.1,但实际元数据为0.0.0)
复现步骤:
- 执行
python3 flatpak-pip-generator.py py7zr生成依赖配置 - 执行
flatpak-builder --user --install --force-clean --repo=repo build-dir com.test.yaml构建Flatpak
可行解决方法
方法1:锁定兼容的py7zr版本
最新版py7zr依赖的backports.zstd版本在Flatpak的pip源中可能缺失,可选择依赖版本更兼容的py7zr版本:
- 生成指定版本的依赖配置:
python3 flatpak-pip-generator.py py7zr==0.21.0
(注:该版本依赖的backports.zstd版本较低,Flatpak环境可正常获取)
2. 重新执行Flatpak构建命令
方法2:手动修复pyppmd版本元数据问题
pyppmd的tar包存在版本元数据错误,可在Flatpak构建配置中手动修正:
- 打开flatpak-pip-generator生成的yaml文件,找到
python3-pyppmd模块 - 修改其
build-commands,先解压包并修正setup.py的版本号,再安装:
modules: - name: python3-pyppmd buildsystem: simple build-commands: - tar xzf pyppmd-1.3.1.tar.gz - sed -i 's/version="0.0.0"/version="1.3.1"/' pyppmd-1.3.1/setup.py - pip3 install --no-index --find-links="file://${PWD}" --prefix=${FLATPAK_DEST} pyppmd-1.3.1/ sources: - type: file url: https://files.pythonhosted.org/packages/source/p/pyppmd/pyppmd-1.3.1.tar.gz sha256: 2b2240524f000f5a6c4ddf34b6e40c9f385a0f3a7f1770b6d78a0a90b0e042a5
- 确保
backports.zstd已正确添加到依赖模块中 - 重新执行构建命令
方法3:替换为命令行工具+封装库
避开py7zr的依赖问题,直接使用系统级7z工具配合patool:
- 在Flatpak manifest中添加p7zip工具的依赖:
modules: - name: p7zip sources: - type: archive url: https://sourceforge.net/projects/p7zip/files/p7zip/16.02/p7zip_16.02_src_all.tar.bz2 sha256: 5eb20ac0e2944f6cb9c2d51dd6c4518941c185347d4089ea890870dd5457847 buildsystem: simple build-commands: - make all3 - install -Dm755 bin/7z ${FLATPAK_DEST}/bin/7z
- 生成patool的依赖配置:
python3 flatpak-pip-generator.py patool
- 在代码中使用patool调用7z解压:
import patoolib patoolib.extract("your_file.7z", outdir="output_dir")
- 重新构建Flatpak
内容的提问来源于stack exchange,提问作者Allexio
相关产品推荐
相关产品推荐

