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

PyInstaller打包含Spacy的程序运行时报错找不到spacy.tokens._dict_proxies模块

解决方案

错误根因

PyInstaller无法识别Spacy中Cython编译模块的动态导入逻辑,导致遗漏了spacy.tokens._dict_proxies等子模块,直接运行脚本时Python解释器可以自动检索到对应模块,因此不会报错。

分步操作方案

  • 方案1:命令行直接指定缺失模块打包
    如果你暂时没有使用spec文件管理打包配置,直接在打包命令中追加缺失模块的隐藏导入参数即可:

    pyinstaller --onefile --windowed --hidden-import "spacy.tokens._dict_proxies" FleetMatch_Web_Crawler.py
    

    其中--windowed是GUI程序专用参数,可避免运行exe时弹出黑色控制台窗口,不需要可以删除。

  • 方案2:修改spec文件补充隐藏导入
    如果你已经在用spec文件配置打包,直接修改Analysis段的hiddenimports配置项,除了当前报错的模块,还可以提前补入其他高频遗漏的Spacy模块:

    a = Analysis(
        ['FleetMatch_Web_Crawler.py'],
        # 其余原有配置(pathex、binaries、已经添加的Spacy语言模型datas配置等)保持不变
        hiddenimports=[
            'spacy.tokens._dict_proxies',
            'spacy._align',
            'spacy.pipeline.pipes',
            'spacy.kb',
            'spacy.util'
        ],
        # 其余原有配置保持不变
    )
    

    修改完成后直接用pyinstaller your_config.spec重新打包即可。

  • 方案3:添加Spacy专属Hook自动拉取全量依赖
    如果多次打包仍然提示不同的Spacy模块缺失,可以创建自定义Hook让PyInstaller自动检索所有Spacy相关依赖:

    1. 在项目根目录新建hooks文件夹
    2. 在hooks文件夹下新建hook-spacy.py文件,写入以下内容:
    from PyInstaller.utils.hooks import collect_all
    datas, binaries, hiddenimports = collect_all('spacy')
    
    1. 打包时在命令中追加hook路径参数:
    pyinstaller --onefile --windowed --additional-hooks-dir ./hooks FleetMatch_Web_Crawler.py
    

    或者在spec文件的hookspath配置项中加入./hooks路径即可。

注意事项

  • 打包前确认当前命令行环境的Python解释器和你正常运行脚本的解释器是同一个,避免不同环境的Spacy版本差异导致依赖不匹配
  • Spacy语言模型需要单独加入打包的datas配置中,且代码中加载模型时使用相对路径,不要使用本地绝对路径
  • 排查问题时可以先去掉--onefile参数打包为文件夹模式,测试运行正常后再打包为单EXE文件,可大幅减少打包测试的时间消耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 13:15:04