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

修改manifest后PyInstaller打包Python exe报380 Ordinal not found如何解决

故障环境与现象
  • 运行环境:Python 3.7、PyInstaller 4.5、Windows 10
  • 触发操作:修改PyInstaller打包生成的exe配套manifest文件名后改回原名称
  • 故障表现:应用持续报错380 Ordinal not found无法启动;同路径同文件名重装应用故障依旧,修改安装路径或exe文件名后应用可正常运行
根本原因

故障与PyInstaller打包逻辑无关,是Windows系统两类持久化缓存的机制特性导致:

  • SxS并行程序集清单缓存:Windows首次启动带manifest配置的可执行文件时,会以exe的完整绝对路径+文件名作为唯一索引,将manifest解析结果、依赖运行库/COM组件的版本匹配关系存入WinSxS缓存库。你修改manifest后首次启动时,系统解析到无效的依赖配置,将错误的依赖匹配关系写入了对应索引的缓存条目;后续哪怕你把manifest改回正确版本,系统启动时会优先读取缓存中的错误记录,不会重新加载磁盘上的正确manifest,最终因为缓存记录的DLL导出序号和实际文件不匹配,抛出序数找不到的错误。
  • AppCompat应用兼容性缓存:系统为加快应用启动速度,会按相同的“绝对路径+文件名”索引,记录每个启动过的exe的兼容性垫片配置、文件校验结果。你启动损坏配置的exe时,系统给对应索引的条目打上了配置异常的标记,后续启动直接走预设的错误分支,不会重新校验磁盘上的文件完整性。

两类缓存都不会因为同路径同名文件的覆盖安装自动更新,因此重装后故障会持续存在;修改路径或文件名相当于生成了全新的缓存索引,系统找不到旧的错误缓存,会重新读取磁盘上的正确配置,应用即可正常启动。

解决方法

方案1:刷新系统SxS缓存(优先选择)

  1. 以管理员身份打开命令提示符,依次执行以下命令:
sfc /scannow
Dism.exe /online /Cleanup-Image /StartComponentCleanup
  1. 命令执行完成后重启电脑,原路径下的应用即可正常启动。

方案2:手动清理对应AppCompat缓存

  1. 按Win+R输入regedit打开注册表编辑器,定位到以下两个路径,找到和故障exe完整绝对路径匹配的条目,直接删除:
    • HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
  2. 再定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache路径,清空该键下的缓存值(操作前建议备份对应注册表项,避免配置异常)。
  3. 重启电脑后重新启动应用即可。

方案3:清理PyInstaller临时运行残留

PyInstaller打包的单文件exe启动时会在系统临时目录生成_MEIxxxxxx格式的解压缓存,损坏配置启动时生成的残留文件也可能导致启动异常:

  1. 在资源管理器地址栏输入%temp%回车打开临时目录
  2. 删除所有名称以_MEI开头的文件夹,再重新启动应用即可。

临时绕过方案:如果不需要保留原安装路径和原文件名,直接修改exe文件名、或将应用移动到其他目录,即可绕过旧缓存直接正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:36:26