pyinstaller安装
官方网站:https://www.pyinstaller.org/
直接使用pip安装即可全局使用。
1 |
pip install pyinstaller |
本文仅记录博主在pyinstaller使用过程中遇到的一些问题,如果你是第一次接触pyinstaller,请先阅读pyinstaller说明文档
pyinstaller常用参数
部分常用命令行参数如下:
官方网站:https://www.pyinstaller.org/
直接使用pip安装即可全局使用。
1 |
pip install pyinstaller |
本文仅记录博主在pyinstaller使用过程中遇到的一些问题,如果你是第一次接触pyinstaller,请先阅读pyinstaller说明文档
部分常用命令行参数如下:
通常,由于参数过多,不方便记录,博主一般先生成.spec文件后再编辑spec文件。
PS:spec文件是pyinstaller打包过程中生成的配置文件,所有的命令行参数都会存于该文件。
使用pyi-makespec来生成spec文件
1 |
pyi-makespec options test.py [other scripts …] |
参数和pyinstaller一致,执行完毕后会在当前目录生成一个.spec的配置文件,部分参数和说明如图:
修改完spec文件之后,用pyinstaller打包即可在dist文件夹内生成可执行exe
1 |
pyinstaller test.spec |
1 |
pyinstaller -F test.py |
如果是简单的脚本,通知只需要一个main.py程序即可完成,我们只需要打包单个py文件即可。
可如果涉及到资源文件的引入(比如外部调用文件),我们就需要将这些文件一起打包进exe文件里,方便调用。
将多个杂乱无章的文件转换成一个可执行文件,这也是打包的意义所在。
首先我们要在spec配置文件中配置要引入的文件夹
打包的可执行程序在运行过程中,会将这些目录释放到系统的tmp临时目录,我们要适当修改程序来获取这些目录的绝对地址供我们在程序中调用。
1 2 3 4 5 6 7 |
# 获取绝对目录 def resource_path(relative_path): base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__))) return os.path.join(base_path, relative_path) # 获取到的绝对路径对应:poppler-21.09.0/Library/bin 目录 resource_path(os.path.join("poppler-21.09.0", "Library", "bin")) |
根据官方文档,打包时加入-w参数不弹出控制台。
我当然是默认就加上了,可在实际测试过程中发现,程序一闪而过,没有输入输出,最后还是去掉了w参数。
如果脚本使用文件输入输出函数的,建议去掉这个参数。
由于最新的python3.9不支持Windows7,所以导致使用python3.9打包的可执行程序不能再Windows7上运行。
使用Windows3.8打包或者在打包时引入api-ms-win-core-path-l1-1-0.dll文件即可。