“谁闻鸡起舞”
- 0. exe打包完整流程
- 1. 打简单的单文件
- 1.1 生成文件夹
- 1.2 生成多文件
- 2.路径问题
- 3. 模块依赖问题(手动指定打包)
- 3.1 解决方法
- 4. 细节问题
- 4.1 exe显示/不显示报错信息
pye2e和pyinstaller均支持.py文件到.exe文件的打包。这里主要介绍pyinstaller,没有为什么。
安装:
pip install pyinstaller
- 支持MAC,win
0. exe打包完整流程
完整流程应该是一个项目对应一个虚拟环境,还有依赖。
- 创建虚拟环境
- 完成本地开发
- 导出依赖
pip freeze > requirements.txt- 到新环境安装依赖
pip install -r requirements.txt- 用pyinstaller打包
具体打包见下文
1. 打简单的单文件
如果要自定义应用程序名加参数-n 文件名即可
1.1 生成文件夹
含exe,执行:
pyinstaller -D hello.py -n hello
最终同helllo.py目录下生成:
/build文件夹:编译中间文件
/dist文件夹:打包结果,可以压缩dist然后发给别人
/hello.spec:打包过程中的配置文件
1.2 生成多文件
只有exe文件
pyinstaller -F hello.py -n hello
输出只有一个/dist/下的一个exe文件。
说明:这个程序在执行的时候,会自动解压很多需要的文件和依赖,会在系统的一个临时路径下执行。因此如果有用到其他文件或者读取其他文件的话请:参考
2.路径问题
打包项目中需要用到其他文件,请参考
3. 模块依赖问题(手动指定打包)
模块依赖有如下几种情况:
- exec.py 依赖A.py
- exec.py 依赖A.py A.py依赖B.py
这两种情况都是可以自动解决的。
这种情况不会自动导入包:
动态导入包的情况例如使用了importlib,就不会自动导包,所以要手动指定需要打包的文件。
3.1 解决方法
此时我们就用到了上一步生成的hello.spec文件(即使它报错了),找到这一行hiddenimports=[]
,在这里手动加入需要打包的文件(data/a.py)
hiddenimports = [
"data.a"
]
然后打包命令也要相应改变,如下:
pyinstaller -F hello.spec
4. 细节问题
4.1 exe显示/不显示报错信息
- 双击程序,如果有错直接闪退
- 在终端执行,如果有错会有报错信息