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

PyInstaller打包Pydantic v2报错:`pydantic:compiled`已移除问题咨询

PyInstaller适配Pydantic v2问题解决方案

问题确认

你遇到的报错确实是PyInstaller官方钩子未适配Pydantic v2导致的——钩子文件hook-pydantic.py中仍保留了针对Pydantic v1的pydantic:compiled相关逻辑,而该特性在v2中已被移除。

临时解决办法

1. 升级依赖包

先尝试更新到最新版的PyInstaller和钩子库,后续版本可能已修复适配问题:

pip install --upgrade pyinstaller pyinstaller-hooks-contrib

更新完成后重新执行打包命令,验证是否解决问题。

2. 修改钩子文件

如果升级后仍报错,手动修改报错提示中的hook-pydantic.py文件:

  • 定位到路径C:\paul\AmDesp\venv\Lib\site-packages\_pyinstaller_hooks_contrib\hooks\stdhooks\hook-pydantic.py
  • 打开文件,搜索包含compiled的代码段(比如尝试导入pydantic.compiled或检查pydantic:compiled配置的部分)
  • 将这部分代码注释或删除,保存后重新打包。

3. 打包时排除无效模块

在打包命令中添加参数,强制排除不存在的模块:

pyinstaller --exclude-module pydantic.compiled your_script.py

参与适配开发的方向

核心修复点是给hook-pydantic.py添加版本区分逻辑:

  • 在钩子代码开头加入Pydantic版本检测,判断当前版本是否为v2及以上
  • 针对v2版本,跳过所有和pydantic.compiled相关的导入、检查逻辑
  • 遵循PyInstaller钩子编写规范,确保修改同时兼容v1和v2版本

入门步骤:

  1. 查阅PyInstaller钩子的官方编写规范(仓库内说明或本地文档)
  2. 梳理hook-pydantic.py中现有和compiled相关的逻辑
  3. 添加版本判断代码,示例如下:
import pydantic
from packaging.version import Version

if Version(pydantic.__version__) >= Version("2.0"):
    # 跳过v2中不存在的compiled相关逻辑
    pass
else:
    # 保留原v1的处理逻辑
    ...
  1. 测试修改后的钩子对v1、v2版本的兼容性,之后提交修复PR。

替代构建工具

如果暂时不想折腾适配,可以尝试:

  • Nuitka:将Python代码编译为C级可执行文件,对Pydantic v2支持较好
  • cx_Freeze:配置简单的打包工具,对新库的适配速度较快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:02:20