Python 进阶必学库:Pyinstaller 使用详解 !

HackPython 致力于有趣有价值的编程教学

 

 

 

 

 

简介

当我们希望将自己编写好的程序传送给他人使用时,如果对方没有安装 Python 环境就无法使用程序了,我们难以让每个使用者都安装 Python 环境,是否可以在不必安装 Python 环境的前提下使用 Python 程序呢??

可以使用 Pyinstaller 将程序打包,然后再分享给其他人使用,他人使用只需双击运行打包好的程序。

可以通过 pip 来安装,命令如下:

pip install pyinstaller

 

使用

pyinstaller 最重要的两个参数就是 -F 与 -D 参数。

使用 - F 参数, pyinstaller 会将 python 程序打包成单个可执行文件。

使用 - D 参数, pyinstaller 会将 python 程序打包成一个文件夹,运行程序时,需要进入该文件夹,点击运行相应的可执行程序。

为了美观,还可以通过 - i 参数指定打包程序的图标 (icon),但这个命令只能在 Windows 平台下生效,此外还可以使用 - n 参数指定生成打包文件的名称。

如果你使用了 PyQt5 或 tkinter 开发了界面,通常不会希望程序运行时弹出 cmd 命令行,此时就可以使用 - w 参数。

?简单总结一下:

-F:打包 Python 程序为单个可执行文件

-D:打包 Python 程序为一个文件夹

-i:生成图标,只适用于 Windows 平台

-n:指定打包后生成文件的名称

-w:禁止命令行弹出

综上所述,最常见的命令为:

pyinstaller 
-
i xxx
.
ico 
-
n xxx 
-
w 
-
D xxx
.
py

-i 参数后必须接 .ico 结尾的图标文件

-D 或 -F 后必须接 python 程序的入库程序,常见情况为 main.py

对应依赖比较多的程序,建议使用 -D, -F 更适合单文件的 py 脚本。

简单原理

打包时,pyinstaller 此时会生成相应的 spec 文件,大体流程如下:

?1、在脚本目录生成 xxx.spec 文件 (取决于 -n 参数,没传,则与 xxx.py 同名为 xxx);

?2、创建一个 build 目录;

?3、写入一些日志文件和中间流程文件到 build 目录;

?4、创建 dist 目录;

?5、生成可执行文件或文件夹到 dist 目录;

 

 

 

 

此时,进入 dist 目录就可以看见自己的打包文件了。

 

 

 

 

 

击 nameauto.exe 文件,效果如下:

效果如下:

 

 

 

 

 

这是一个利用 tkinter 构建的程序。

注意事项

Pyinstaller 是跨平台的,但并不是指其生成应用是跨平台的,而是 Pyinstaller 本身是跨平台的,在 Windows 平台下,可以打包出 exe 文件。

?避免打包后,包文件过大

为了避免 Pyinstaller 打包后程序或文件夹过大,如:几百 KB 的程序打包后编程 500M 左右的程序,在引用包时,尽量使用 from ... import ... 语句,这是因为 Pyinstaller 打包的路径其实是将 python 解释器以及项目中使用的库直接复制过来,所以如果你没事就别 import... ,那么 Pyinstaller 会将整个模块复制过去,此时打出来的包就会很大。

?考虑路径问题

使用 python 时,要养成使用 os.path.join 的习惯,这不仅可以避免跨平台的路径坑 (windows 路径表达与类 Unix 是不同),又可以在打包时不会出现相对路径的问题,很多 python 程序员编写路径喜欢使用 + 号来链接路径,这会增加项目的维护成本

pyinstaller 打包的项目遇到路径都使用 os.path.join 则可

?外部数据问题

虽然在上节中,提及了使用外部数据时,可以自定义 spec 文件中的 datas 字段,但我更常用的做法是直接将数据复制过去,不去修改 datas。

比如我的项目中依赖 config 文件夹下的配置文件,执行将 config 文件夹整体直接复制到打包好的文件夹中则可

?闪屏结束

如果是简单的程序,可能会出现运行可执行程序后出现一闪而过的情况,这种情况下要么是程序运行结束(比如直接打印的 helloWorld),要么程序出现错误退出了。

这种情况要么通过 input () 函数捕捉输入自己主动结束程序,要么就在 cmd 下运行 exe 文件,从而通过 cmd 看到效果

结尾

掌握了 Pyinstaller 后,你就可以将任意程序打包发送给他人了,最后欢迎学习 HackPython 的教学课程并感觉您的阅读与支持。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值