如何将.py文件打包为.exe 可在无Python及依赖的任意电脑运行
根因说明
auto-py-to-exe是PyInstaller的图形化封装工具,打包后报ModuleNotFoundError: No module named 'pygame'通常是三个原因导致:
- 启动auto-py-to-exe时调用的Python环境没有安装pygame,工具扫描不到对应依赖
- pygame包含大量动态链接库和子模块,PyInstaller默认的静态扫描逻辑会漏识别隐式依赖
- 选择了单目录打包模式但没有完整拷贝所有生成的附属文件,到其他电脑运行时就会缺依赖
按照下面的步骤操作,就能打包出不需要目标设备预装Python、不需要预装任何依赖的单exe文件,在任意Windows电脑上直接运行。
方案一:用现有auto-py-to-exe工具修正配置打包
- 不要直接点击桌面快捷方式启动auto-py-to-exe。先打开命令提示符/终端,激活你安装了pygame的项目对应Python环境,在激活的终端中输入
auto-py-to-exe启动工具,确保工具能读取到当前环境下安装的所有依赖。 - 打包模式选择单文件(One File),不要选择单目录模式,避免文件遗漏。
- 找到「高级设置」分类下的「隐式导入(Hidden Imports)」配置项,逐行添加以下内容:
pygame- 你项目中用到的pygame子模块,比如
pygame.font、pygame.mixer、pygame.image、pygame.display等
- 如果你的项目用到了pygame自带的字体、音效等资源,找到「附加文件」配置项,把本地Python环境中pygame安装目录下的对应资源文件夹添加进去。
- 选择你的项目入口py文件,点击打包即可,生成的exe文件存放在输出目录的
dist文件夹下。
方案二:用命令行PyInstaller打包(成功率更高)
如果GUI工具配置后依然报错,直接用命令行调用PyInstaller打包,可控性更高:
- 激活装了所有项目依赖的Python环境,执行命令升级PyInstaller到最新版,避免旧版本的依赖扫描bug:
pip install --upgrade pyinstaller - 切到你项目入口py文件所在的目录,执行打包命令:
参数说明:pyinstaller -F -w --collect-all pygame 你的项目入口文件名.py-F:将所有依赖和代码打包为单个exe文件-w:运行exe时不弹出黑色控制台窗口(如果需要看运行日志排查问题,可以去掉这个参数)--collect-all pygame:自动收集pygame库所有的模块、动态链接库、资源文件,彻底解决依赖漏扫问题,不需要手动一个个加隐式导入
- 打包完成后,到
dist文件夹下取生成的exe文件即可,这个文件可以直接拷贝到没有安装Python的电脑上运行,不需要提前装任何依赖。
打包注意事项
- 项目存放路径、打包输出路径不要包含中文、空格或者特殊字符,否则会导致依赖扫描失败
- 打包过程中暂时关闭杀毒软件,避免杀毒软件误删打包临时文件,导致生成的exe缺损
- 如果是给不同架构的电脑打包(比如32位系统),需要在对应32位的Python环境下执行打包操作,64位环境下打包的exe无法在32位系统运行
内容的提问来源于stack exchange,提问作者Chetan Rathod
相关产品推荐
相关产品推荐

