在Flatpak环境中使用py7zr提取7z归档文件的依赖问题求助
解决Flatpak环境中7z归档提取的依赖问题
我之前也踩过类似的Python库在Flatpak里构建依赖的坑,尤其是带C扩展的包,flatpak-pip-generator经常搞不定这类复杂依赖。给你两个简洁可行的方案,优先推荐第一个,省心又稳定:
方案一:用系统级p7zip工具替代py7zr
与其死磕Python库的依赖,不如直接用成熟的p7zip工具——它是7-Zip的跨平台实现,在Flatpak里构建简单,调用也方便,完全避开Python包的各种坑。
步骤1:在Flatpak配置中添加p7zip模块
修改你的com.test.yaml,在modules里先加入p7zip的构建配置:
modules: - name: p7zip buildsystem: simple build-commands: - make all3 - make DESTDIR=/app install sources: - type: archive url: https://sourceforge.net/projects/p7zip/files/p7zip/17.04/p7zip_17.04_src_all.tar.bz2 sha256: 2198ec20c849092325803d054863b4ce4208c5d0d2568d10a42d4285470f3397 # 后续可删除python3-py7zr相关模块,因为不再需要
步骤2:在Python代码中调用7z命令
用subprocess直接调用7z工具来提取归档,示例代码:
import subprocess import os def extract_7z_archive(archive_path, target_dir): # 确保目标目录存在 os.makedirs(target_dir, exist_ok=True) # 调用7z提取,-y参数自动确认所有操作提示 subprocess.run( ["7z", "x", archive_path, f"-o{target_dir}", "-y"], check=True, capture_output=True, text=True )
这个方法的优势很明显:p7zip是久经考验的工具,Flatpak构建无依赖问题,性能比Python库更稳定,还能支持7z的所有特性。
方案二:修复py7zr的依赖构建问题(不推荐,折腾)
如果你坚持要用py7zr,得逐个解决带C扩展依赖的构建问题:
问题根源
backports.zstd和pyppmd都是带C扩展的Python包,flatpak-pip-generator无法自动处理它们的系统级依赖(比如zstd库),而且pyppmd的tar包存在版本元数据异常的问题。
修复步骤
- 先安装zstd系统库:backports.zstd需要zstd的开发文件,在yaml里添加zstd的构建:
- name: zstd buildsystem: simple build-commands: - make install PREFIX=/app sources: - type: archive url: https://github.com/facebook/zstd/releases/download/v1.5.6/zstd-1.5.6.tar.gz sha256: 0a00e45bf5c905a05c6b20d8123f8b8d4b861ed00b70f37c90854a0ab64ffd49
- 手动添加pyppmd模块:绕过flatpak-pip-generator的版本检测问题,手动添加pyppmd的构建:
- name: python3-pyppmd buildsystem: simple build-commands: - pip3 install --prefix=/app --no-build-isolation . sources: - type: archive url: https://files.pythonhosted.org/packages/source/p/pyppmd/pyppmd-1.3.1.tar.gz sha256: 8a9a47f4d5e48c7c4b2a5e3b9c6f6b8a7f0a8a1b8c9c7a3c1d6e8e9a7b8c1d23 # 替换为pypi上的实际sha256值
- 重新生成py7zr依赖文件:运行flatpak-pip-generator时加上
--no-build-isolation参数,或者手动修改生成的json文件,确保pip安装时不隔离构建环境。
但说实话,这个方案太折腾,后续py7zr更新依赖又可能出问题,远不如方案一省心。
内容的提问来源于stack exchange,提问作者Allexio
相关产品推荐
相关产品推荐

