You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyInstaller打包Python多库程序时遇xml.parsers.expat缺失错误求助

解决PyInstaller打包时xml.parsers.expat模块找不到的问题

问题描述

我是Python新手,开发了一款自用应用,依赖PyQt5、sqlite3、openpyxl等第三方库。使用PyInstaller将其打包为.exe文件时,出现No module named 'xml.parsers'错误,尝试多种引入方式均未解决,恳请提供解决思路。

可复现代码

from decimal import Decimal
import openpyxl  # xl libraries
wb = openpyxl.load_workbook(r'C:\Users\jmstr\OneDrive\Documents\finproxlc.xlsx')
myint = Decimal("27")
print("hello")

使用的PyInstaller命令

pyinstaller C:\Users\usr1\IdeaProjects\GUIProjects\finpro.py -p C:\Users\usr1\venv\Lib\site-packages\openpyxl --hidden-import openpyxl --additional-hooks-dir C:\Users\usr1\venv\Lib\site-packages\openpyxl --collect-all xml.parsers.expat

完整报错信息

['C:\Users\usr1\IdeaProjects\GUIProjects', 'C:\Users\usr1\venv\Lib\site-packages\openpyxl'] 
Traceback (most recent call last): 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\runpy.py", line 197, in _run_module_as_main 
return _run_code(code, main_globals, None, 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\runpy.py", line 87, in _run_code 
exec(code, run_globals) 
File "C:\Users\usr1\AppData\Local\Programs\Python\Python39\Scripts\pyinstaller.exe__main__.py", line 7, in <module> 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller__main__.py", line 194, in console_script_run 
run() 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller__main__.py", line 180, in run 
run_build(pyi_config, spec_file, **vars(args)) 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller__main__.py", line 61, in run_build 
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\building\build_main.py", line 977, in main 
build(specfile, distpath, workpath, clean_build) 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\building\build_main.py", line 899, in build 
exec(code, spec_namespace) 
File "C:\Users\usr1\finpro.spec", line 14, in <module> 
a = Analysis( 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\building\build_main.py", line 379, in __init__ 
self.hookspath += discover_hook_directories() 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\isolated_parent.py", line 404, in wrapped 
return call(function, *args, **kwargs) 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\isolated_parent.py", line 373, in call 
return isolated.call(function, *args, **kwargs) 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\isolated_parent.py", line 311, in call 
raise RuntimeError(f"Child process call to {function.__name__}() failed with:\n" + output) 
RuntimeError: Child process call to discover_hook_directories() failed with: 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\isolated_child.py", line 63, in run_next_command 
output = function(*args, **kwargs) 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\PyInstaller\building\build_main.py", line 107, in discover_hook_directories 
import pkg_resources 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\site-packages\pkg_resources\__init__.py", line 35, in <module> 
import plistlib 
File "c:\users\usr1\appdata\local\programs\python\python39\lib\plistlib.py", line 61, in <module> 
from xml.parsers.expat import ParserCreate 
ModuleNotFoundError: No module named 'xml.parsers'

解决思路

  • 验证Python标准库完整性:xml.parsers.expat是Python标准库的一部分,先在命令行执行python -c "from xml.parsers.expat import ParserCreate; print('正常')",确认本地Python3.9环境中该模块能正常导入。如果执行失败,说明Python环境损坏,需要重新安装Python。
  • 修正PyInstaller命令参数:
    • 移除--additional-hooks-dir参数:你指定的openpyxl目录不是PyInstaller的hook目录,这个参数会干扰hook发现逻辑,导致pkg_resources导入出错。
    • 调整模块收集参数:将--collect-all xml.parsers.expat改为--hidden-import xml.parsers.expat,或者直接收集整个xml.parsers包:--collect-all xml.parsers。
    • 简化后的命令:
      pyinstaller C:\Users\usr1\IdeaProjects\GUIProjects\finpro.py --hidden-import openpyxl --hidden-import xml.parsers.expat
      
  • 直接修改spec文件:如果已经生成了finpro.spec文件,打开文件找到Analysis部分,在hiddenimports列表中添加'xml.parsers.expat',例如:
    a = Analysis(
        ['C:\\Users\\usr1\\IdeaProjects\\GUIProjects\\finpro.py'],
        pathex=[],
        binaries=[],
        datas=[],
        hiddenimports=['openpyxl', 'xml.parsers.expat'],
        hookspath=[],
        hooksconfig={},
        runtime_hooks=[],
        excludes=[],
        win_no_prefer_redirects=False,
        win_private_assemblies=False,
        cipher=None,
        noarchive=False,
    )
    
    然后执行pyinstaller finpro.spec重新打包。
  • 重建虚拟环境:如果以上方法都无效,考虑创建一个全新的虚拟环境,重新安装所有依赖库后再尝试打包,避免环境中存在损坏的依赖文件。

内容的提问来源于stack exchange,提问作者joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:09:18