使用cx_Freeze生成的EXE本机正常,其他机器报错求解决
问题分析与解决方案
错误根源
报错FileNotFoundError: [WinError 2] The system cannot find the file specified并非subprocess模块缺失(cx_Freeze会自动打包标准库模块),而是你的代码通过subprocess.run调用的**外部可执行文件(比如视频压缩用到的ffmpeg)**没有被打包进EXE,目标机器上也没有这个工具,导致系统找不到该文件。
解决步骤
定位外部程序
找到代码中subprocess.run调用的具体可执行文件(比如ffmpeg.exe),确认它在开发机器上的完整路径。修改setup.py打包配置
在cx_Freeze的setup()函数中,添加include_files参数,将外部程序纳入打包范围:from cx_Freeze import setup, Executable # 替换成你的外部程序路径和目标文件名 external_exe = ("C:/path/to/ffmpeg.exe", "ffmpeg.exe") setup( name="VideoCompressor", version="3.0", executables=[Executable("Video_Compressor_v3.py")], options={ "build_exe": { "include_files": [external_exe], # 保留其他已有配置 } } )调整代码中的调用路径
cx_Freeze打包后会将资源解压到临时目录,需要动态获取该路径来调用外部程序,修改代码如下:import sys import os import subprocess def get_tool_path(tool_name): # 打包后从临时目录获取,开发环境直接用原名称 if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, tool_name) return tool_name # 示例调用(替换成你的实际参数) def compress_videos(): ffmpeg_path = get_tool_path("ffmpeg.exe") subprocess.run([ffmpeg_path, "-i", "input.mp4", "output.mp4"], check=True)重新打包测试
运行python setup.py build重新生成EXE,拿到无Python环境的机器上测试。
内容的提问来源于stack exchange,提问作者Kedar
相关产品推荐
相关产品推荐

