Pyinstaller打包

Posted 金字塔上的猫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pyinstaller打包相关的知识,希望对你有一定的参考价值。

上一篇的后续,使用pyinstaller打包的一些注意事项。

文件目录

 

打包目标

生成一个资源可以替换、可以发布到别人电脑上的文件。

一些小小的注意事项

路径问题

因为是一个涉及到资源处理文件操作的程序,所以资源文件和操作对象的路径怎么写就成了一个很关键的问题。

解决方法一:使用绝对路径。没有问题,但不能移植到别人的电脑上。

解决方法二:发布的是一个文件包,里面包含exe和资源文件、被操作文件,根据文件包中的架构编写相对路径。

欲采用方法二。

方法二比较简单,只是类似于前端中,由于js文件(A)是在html文件(B)中被引入的,因此,在A中写调用资源文件C时,要注意调用的相对路径要基于B而不是A。同理,只要代码中的相对路径都是基于打包后生成的exe文件就好了。

Pyinstaller的参数问题:

-F 和 -D:

-F 会把程序和所有依赖的库打包成一个可执行文件,启动较慢;-D会生成一个文件夹,里面有可执行文件和依赖的库对应的文件,启动较快。推荐使用-D,因为根据网上的某篇文章,使用-F路径会更麻烦(Python打包exe遇到的坑,路径不对,文件找不到,递归超过最大深度等_吃苹果的程序猿的博客-CSDN博客

-i

用于设置图标。被选为图标的图像文件后缀名应为ico(其实只要下载一张图片,更改其后缀就好,这个方法对大多数格式都适用)。图标文件的相对路径要基于打包时所处的目录来写,我一般把图标文件和要被打包的py文件放在一个目录下,因此直接写图标文件的名称即可。

-c 和 -w:

-c对应cmd,带控制台窗口。-w对应windows,一般用在自带图形界面GUI的程序上,或者不想太初控制台窗口时。

如果代码中有print语句但exe程序不带控制台窗口,可能会报错。

控制台闪退

程序运行完成后,控制台会自己关闭。

应对方法一:引入time包,代码末尾加

time.sleep()

应对方法二:代码末尾加

input('请按任意键退出')

我个人的理解是,input会等待一个键盘输入,在键盘按键被按下前,程序不算执行完,控制台自然不会消失。(以上两种方法摘自下面的博客Python打包exe遇到的坑,路径不对,文件找不到,递归超过最大深度等_吃苹果的程序猿的博客-CSDN博客

打包流程

首先下载安装pyinstaller。

pip install pyinstaller

安装完成后,打开cmd,进入要被打包的文件(本文是main_4)所在的目录。

首先输入D:进入D盘(如果要进入E盘则是E:),然后输入cd+' '+文件所在路径。

这个程序是带图形界面的,因此在-w和-c中选择-w。

并不想把所有的依赖库都打包进一个exe文件(这样似乎不太好处理被调用/操作的外部文件),所以在-D和-F中选择-D(这里可以不写,因为默认选择-D)。

欲设置图标,选择R-C.ico为图标文件。

在cmd中输入如下命令:

pyinstaller -w -i R-C.ico main_4.py

开始打包,时间较长。

完成后,出现Build、dist文件夹及spec文件。

打包完成后,根据之前在原始代码中写入的资源/被操作文件的路径,把对应文件放到对应的位置(本文中为在dist目录下新建source文件夹,并将对应资源放入其中)。

之后,在dist中的main_4文件夹下找到main_4.exe文件,双击运行,发现没有问题。

将dist文件移动到其他位置,其中的exe文件仍能正常运行。

Over!

其他问题

打包后体积过大

可能是引入的包过多,或者当前环境下下载的包过多。

解决方案一:减少引入,能from xxx import xxx,就不要import xxx。(本次然并卵了,用list代替了ndarray,没有引入numpy,但包的大小基本一致……)

解决方案二:创建虚拟环境,在其中之下必须的包,在虚拟环境下打包。

不理解spec文件和Build文件夹的作用

理论上来讲spec文件是用来配置各种路径的。

python-pyinstaller打包

python-pyinstaller打包

安装Pyinstaller

pip install pyinstaller 

常用打包命令

Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包
Pyinstaller -F -w py_word.py 不带控制台的打包
Pyinstaller -F py_word.py 打包exe
参数 说明
-F 产生单个的可执行文件
-D 产生一个目录(包含多个文件)作为可执行程序
-a 不包含 Unicode 字符集支持
-d debug 版本的可执行文件
-w 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字
-i 指定可执行程序的icon

以上是关于Pyinstaller打包的主要内容,如果未能解决你的问题,请参考以下文章

python-pyinstaller打包

Python打包方法——Pyinstaller (python3)

Python3快速入门(十八)——PyInstaller打包发布

python使用pyinstaller打包项目文件

详解python文件打包成exe(pyinstaller简介.安装.打包.常见问题)

利用pyinstaller 打包Python文件