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

使用cxFreeze将含多目录的大型Python项目打包为单EXE时遭遇目录未找到错误的解决方案咨询

cxFreeze将含多目录的大型Python项目打包为单EXE时遭遇目录未找到错误的解决方案咨询

看起来你在打包包含多目录的Python项目时遇到了路径相关的问题,我来帮你一步步解决这个问题。

首先,先根据你的描述还原项目结构:

QRCodeAttendanceV2/
├── setup.py
├── src/
│   ├── main.py
│   ├── [其他Python模块文件]
├── Data/
│   ├── [项目数据文件]
└── Resources/
    ├── [图片、配置等资源文件]

接下来,我们从配置修正、代码路径优化两个核心方向解决问题:

1. 修正setup.py的关键错误

你当前的配置存在两个核心问题:入口文件路径错误,以及build配置项拼写错误,导致include_files完全不生效。下面是修正后的完整配置:

import os
from cx_Freeze import setup, Executable

# 获取setup.py所在的项目根目录,避免硬编码路径
base_dir = os.path.dirname(os.path.abspath(__file__))

# 指定需要打包的非Python资源目录:将根目录下的Data、Resources复制到打包后的目录
include_files = [
    os.path.join(base_dir, "Data"),
    os.path.join(base_dir, "Resources")
]

options = {
    # 注意这里是`build_exe`,不是你之前写的`build.exe`,拼写错误会导致配置失效!
    'build_exe': {
        'include_files': include_files,
        # 如果某些依赖模块没被自动识别,可以手动添加(比如customtkinter/opencv)
        # 'packages': ['customtkinter', 'cv2'],
    }
}

setup(
    name="QR Attendance",
    version="0.1",  # 版本号建议用字符串,避免潜在的类型问题
    description="A QR-based attendance system utilizing JSON data storage (local)",
    # 入口文件是src目录下的main.py,必须写完整相对路径
    executables=[Executable("src/main.py", base="Win32GUI")],
    options=options
)

2. 优化代码中的路径引用

即使打包配置正确,如果你的代码用了硬编码的相对路径(比如open("Data/data.json")),运行exe时还是会找不到文件。因为打包后exe所在目录是build/exe.win32-3.x/(路径会随Python版本变化),你需要动态获取程序运行的根目录:

在你的Python业务代码中,替换所有资源/数据路径为动态路径:

import os

# 获取当前运行文件的目录(开发时是src目录,打包后是exe所在目录)
current_dir = os.path.dirname(os.path.abspath(__file__))
# 根据开发环境自动定位项目根目录:开发时src是子目录,所以向上跳一级
root_dir = os.path.dirname(current_dir) if "src" in current_dir else current_dir

# 用根目录拼接资源路径,确保开发/打包环境都能正常访问
data_file = os.path.join(root_dir, "Data", "your_data_file.json")
resource_img = os.path.join(root_dir, "Resources", "your_qr_template.png")

3. 正确执行打包命令

确保你在**项目根目录(QRCodeAttendanceV2)**下运行打包命令:

python setup.py build

打包完成后,你会在build/exe.win32-3.x/目录下找到生成的exe,同时Data和Resources目录会被自动复制到该目录下,运行exe就不会再出现路径找不到的错误了。

如果仍有问题,可以检查以下几点:

  • 确认虚拟环境中已正确安装customtkinter、opencv-python等所有依赖,cxFreeze会自动识别已安装的模块
  • 如果src目录下还有非Python资源文件,需要把它们也添加到include_files列表中
  • 查看打包时的控制台输出,有没有提示某些模块/文件未被包含,根据提示补充配置

备注:内容来源于stack exchange,提问作者Ishaan M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:38:05