[Feature Requests] libexpat1版本低导致文法编译python的pyexpat的依赖包
Tofloor
poster avatar
189******31
deepin
2025-04-27 10:16
Author

用pyinstaller打包的python程序报错,python=3.11.11,报错如下:

Traceback (most recent call last):
File "PyInstaller/hooks/rthooks/pyi_rth_pkgres.py", line 170, in
File "PyInstaller/hooks/rthooks/pyi_rth_pkgres.py", line 37, in _pyi_rthook
File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
File "pkg_resources/init.py", line 42, in
File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
File "plistlib.py", line 70, in
File "PyInstaller/loader/pyimod02_importers.py", line 450, in exec_module
File "xml/parsers/expat.py", line 4, in
ImportError: /home/lenovo/project/hirpa2/dist/hirpa/_internal/lib-dynload/pyexpat.cpython-311-x86_64-linux-gnu.so: undefined symbol: XML_SetReparseDeferralEnabled
[PYI-1096641:ERROR] Failed to execute script 'pyi_rth_pkgres' due to unhandled exception!

uos 20只能安装libexpat1=2.2,现在应该如何解决,libexpat官网要求2.4+才有XML_SetReparseDeferralEnabled,这个应该如何解决?

Reply Favorite View the author
All Replies
189******31
deepin
2025-04-27 11:26
#1

已经解决,通过在本地重新编译libexpat,并让spec文件中引用

  • 首先,需要下载并编译libexpat 2.6.4版本:
# 创建工作目录
mkdir -p ~/expat_build
cd ~/expat_build

# 下载expat 2.6.4源码
wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-2.6.4.tar.gz
tar -xzf expat-2.6.4.tar.gz
cd expat-2.6.4

# 配置编译选项(指定安装到用户目录下的自定义位置)
./configure --prefix=$HOME/expat_install

# 编译
make -j$(nproc)

# 安装到指定目录
make install
  • 修改.spec文件
# -*- mode: python ; coding: utf-8 -*-

a = Analysis(
    ['your_script.py'],
    pathex=[],
    binaries=[
        ('~/expat_install/lib/libexpat.so.1', '.'),
        ('~/expat_install/lib/libexpat.so.1.10.0', '.')  # 版本号可能会有所不同
    ],
    datas=[],
    hiddenimports=[],
    hookspath=['./hooks'],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=None,
    noarchive=False,
)

pyz = PYZ(a.pure, a.zipped_data, cipher=None)

exe = EXE(...)  # 保持原有配置

coll = COLLECT(...)  # 保持原有配置
Reply View the author