python(flask/sanic)项目打包为可执行文件
onefile代表生成单个可执行文件(默认生成包含依赖的文件夹),name参数后配置可执行文件的名字,app.py是项目启动方法(app.run)所在的py文件。打包完成后会多出两个文件夹和一个spec文件,打包好的exe文件就存放在dist文件夹中。然后在虚拟环境中重新安装你的项目所需的依赖,再在虚拟环境中使用pyinstaller打包。原因:可能出在sklearn,scipy,numpy这几个
第一步:下载pyinstaller
pip install pyinstaller
第二步:在项目路径下执行打包命令
示例:
pyinstaller --onefile --name myApp app.py
pyinstaller --onefile --noconsole --name backEnd app.py //可以隐藏cmd弹窗
onefile代表生成单个可执行文件(默认生成包含依赖的文件夹),name参数后配置可执行文件的名字,app.py是项目启动方法(app.run)所在的py文件。
这里我列出PyInstaller的一些常用参数
| 参数 | 作用 |
|---|---|
| -F , --onefile | 生成单个可执行文件(默认生成包含依赖的文件夹) |
| -D , onedir | 生成包含依赖的文件夹(默认行为) |
| -w, --windowed, --noconsole | 隐藏控制台窗口(适用于 GUI 程序) |
| -i <图标路径>, --icon <图标路径> | 为可执行文件添加图标(.ico 或 .icns) |
| –add-data <源路径:目标路径> | 添加外部文件或文件夹到打包结果中(例如配置文件、图片) |
| –hidden-import <模块名> | 强制包含隐式依赖的模块(解决打包后缺失模块的问题) |
| –name <名称> | 指定生成的可执行文件名称(默认与脚本同名) |
第三步:打包完成查看结果

打包完成后会多出两个文件夹和一个spec文件,打包好的exe文件就存放在dist文件夹中。
可能出现的问题
问题1:打包sanic项目完成后,运行报错 FileNotFoundError: [Errno 2] No such file or directory: …\…\tracerite\style.css’
原因:tracerite未被正确打包。
解决:在命令中添加 --collect-all=tracerite
pyinstaller --collect-all=tracerite --name myApp app.py
问题2:打包sanic项目完成后,运行报错 NameError: name ‘obj’ is not defined
原因:可能出在sklearn,scipy,numpy这几个依赖库里。具体原因未找到。
解决:降低python版本(我从3.11降到了3.9),重新安装依赖库。
用python3.9创建一个虚拟环境,注意,在虚拟环境中一定要重新安装pyinstaller!!!不然虽然pyinstaller命令也能执行,但它使用的外部的环境!!!:
创建虚拟环境命令: python -m venv myenv
创建成功后项目中会多出来一个ENV_DIR文件夹。
激活虚拟环境:
激活虚拟环境命令: myenv\Scripts\activate
退出虚拟环境:deactivate
然后在虚拟环境中重新安装你的项目所需的依赖,再在虚拟环境中使用pyinstaller打包。
补充:pycharm切换虚拟环境
点击File -> settings


魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)