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

使用cx_Freeze打包含scikit-build编译C扩展的脚本时模块缺失问题

解决cx_Freeze打包scikit-build编译的C扩展缺失问题

问题根源

cx_Freeze的自动依赖检测只能识别纯Python模块,你通过scikit-build编译生成的二进制C扩展_atscManufacturing无法被自动识别,因此被归入Missing modules列表,导致运行时找不到依赖直接退出。

解决步骤

无需重新编译C扩展,只需手动将已编译好的扩展文件加入cx_Freeze的打包配置即可,操作如下:

1. 定位已编译的C扩展文件

首先找到_atscManufacturing的二进制文件,不同系统后缀不同:

  • Windows系统后缀为.pyd
  • Linux/macOS系统后缀为.so
    该文件一般存放在Python环境的site-packages/atsc/atscManufacturing/目录下,复制该文件的绝对路径备用。

2. 修改主程序的setup.py配置

调整cx_Freeze的build_exe_options参数,新增includes声明缺失的模块,新增include_files将已编译的二进制文件拷贝到打包后的对应目录,修改后完整代码如下:

from cx_Freeze import setup, Executable

# 替换为你第一步获取的_atscManufacturing二进制文件实际绝对路径
EXTENSION_FILE_PATH = "你的扩展文件实际路径,例如:C:/Python310/Lib/site-packages/atsc/atscManufacturing/_atscManufacturing.cp310-win_amd64.pyd"

build_exe_options = {
    # 原有包配置,这里把层级改到atsc根包即可,无需写到底层模块
    "packages": ["os", "atsc", "intelhex", "logging", "atexit", "sys"],
    # 手动添加无法被自动检测的C扩展模块
    "includes": ["_atscManufacturing"],
    # 配置文件拷贝规则:(源文件路径, 打包后存放的目标目录)
    "include_files": [
        (EXTENSION_FILE_PATH, "atsc/atscManufacturing/")
    ],
    "excludes": []
}

base = None

setup(
    name = "Manufacturing script",
    version = "1.0.0",
    description = "manufacturing script",
    options = {"build_exe": build_exe_options},
    executables = [Executable("main.py", base = base)]
)

3. 验证打包结果

重新执行打包命令,打包完成后打开build输出目录,进入lib/atsc/atscManufacturing/路径,确认_atscManufacturing的二进制文件存在即可。

额外排查技巧

如果运行exe仍然闪退,可直接在命令行中启动exe,就能看到具体报错信息,方便定位路径配置等问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:15:04