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

如何配置py2exe打包jsonschema依赖的资源文件?

解决py2exe打包含jsonschema项目时缺失schema文件的问题

在使用py2exe打包依赖jsonschema的Python项目时,常会遇到KeyError: 'jsonschema/schemas/draft3.json'这类错误,原因是py2exe默认未收集jsonschema的schema资源文件。以下是针对新版py2exe的几种有效解决方案:

方法一:显式配置package_data

在setup.py中直接声明jsonschema的资源文件,让py2exe识别并打包:

from setuptools import setup
import py2exe

setup(
    name="YourProject",
    version="1.0",
    console=["main.py"],  # 替换为你的入口脚本
    options={
        "py2exe": {
            "packages": ["jsonschema"],
        }
    },
    package_data={
        "jsonschema": ["schemas/*.json"]
    }
)

该方式利用setuptools的package_data机制,明确告知py2exe需要包含jsonschema下schemas目录的所有json文件。

方法二:手动指定data_files

通过手动定位jsonschema的schemas目录,将文件添加到data_files中,确保打包后目录结构与原包一致:

from setuptools import setup
import py2exe
import os
import jsonschema

# 获取jsonschema的安装路径及schemas目录
jsonschema_root = os.path.dirname(jsonschema.__file__)
schemas_dir = os.path.join(jsonschema_root, "schemas")

# 收集所有schema文件,保持目录结构
schema_files = [
    (os.path.join("jsonschema", "schemas"),
     [os.path.join(schemas_dir, f) for f in os.listdir(schemas_dir) if f.endswith(".json")])
]

setup(
    name="YourProject",
    version="1.0",
    console=["main.py"],
    options={
        "py2exe": {
            "packages": ["jsonschema"],
        }
    },
    data_files=schema_files
)

这种方法适合package_data配置不生效的场景,强制将资源文件复制到对应路径。

方法三:使用py2exe自定义hook

创建py2exe的hook文件来自动收集jsonschema的资源:

  1. 在项目根目录创建hook-jsonschema.py:
from py2exe.hooks import collect_data_files

def hook(mod):
    # 收集jsonschema/schemas下的所有文件
    mod.datas.extend(collect_data_files("jsonschema", subdir="schemas"))
    return mod
  1. 在setup.py中指定该hook:
from setuptools import setup
import py2exe

setup(
    name="YourProject",
    version="1.0",
    console=["main.py"],
    options={
        "py2exe": {
            "packages": ["jsonschema"],
            "hooks": ["hook-jsonschema.py"]
        }
    }
)

hook机制是py2exe的扩展方式,适合需要批量处理多个包资源的场景。

验证方法

打包完成后,检查dist目录下是否存在jsonschema/schemas/目录及对应的json文件,若存在则说明配置生效,运行exe即可解决KeyError问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:15:57