PyInstaller详解:将.py文件打包成exe文件

1. 安装

本人系统是:Ubuntu16.04,python3.7。

安装的pyinstaller =3.5, UPX=upx-3.95-amd64_linux.tar.xz。不安装对应版本的pyinstaller和UPX会一直打包不成功(亲测)。

首先需要安装pyinstaller:

pip install pyinstaller==3.5

如果不安装UPX的话,会出现打包成exe失败:upx is not availible.

之后需要下载UPX(Linux为例):https://link.zhihu.com/?target=https%3A//github.com/upx/upx/releases
在这里插入图片描述
解压二进制:

tar -Jxf upx-3.95-amd64_linux.tar.xz

为了方便使用移动 upx 到系统变量目录,如果不愿意使用 root 的话可以将 upx 目录添加到环境变量:

sudo cp upx-3.95-amd64_linux/upx /usr/bin

如果是windows版本的话,步骤如下:

  • 到官网https://upx.github.io下载UPX,根据自己系统位数,选择相应版本就行。然后解压缩,得到upx.exe这个文件。
  • 找到当时安装Python位置的文件夹,将upx.exe拷贝到scripts文件夹中,比如我的是D:\Anaconda3\Scripts。

在这里插入图片描述

  • 然后再运行pyinstaller,就会提示UPX is available。

2. PyInstaller 支持的常用选项

options的详情可参考官方帮助文档:https://link.zhihu.com/?target=https%3A//pyinstaller.readthedocs.io/en/stable/usage.html

  • -F,-onefile,dist中产生单个的可执行文件。eg:pyinstaller -F demo.py
  • -D,–onedir,产生一个目录(包含多个文件)作为可执行程序 。eg:pyinstaller -D demo.py
  • -a,–ascii,不包含 Unicode 字符集支持
  • -d,–debug,产生 debug 版本的可执行文件
  • -w,–windowed,–noconsolc,指定程序运行时不显示命令行窗口(仅对 Windows 有效)。eg:pyinstaller -w demo.py
  • -c,–nowindowed,–console,指定使用命令行窗口运行程序(仅对 Windows 有效)eg:pyinstaller -c demo.py
  • -o DIR,–out=DIR,指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
  • -p DIR,–path=DIR,设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径eg:pyinstaller -p E:\python\Lib\site-packages demo.py
  • -n NAME,–name=NAME,指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字。

2.1 创建一个 app 目录,在该目录下创建一个 入口app.py 文件

# 进入该app目录内,执行以下语法
pyinstaller -F app.py

当生成完成后,将会在此 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app.exe 文件,这就是使用 PyInstaller 工具生成的 exe 程序。

在命令行窗口中进入 dist 目录下,在该目录执行 app.exe ,将会看到该程序执行结果。

注:若程序没有可视化界面,不能双击执行程序
在这里插入图片描述

2.2 创建一个 app 目录,在该目录下创建一个入口app.py文件

# 进入该app目录内,执行以下语法
pyinstaller -D app.py

执行上面命令,将看到详细的生成过程。当生成完成后,将会在 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app 子目录,在该子目录下包含了大量 .dll 文件和 .pyz 文件,它们都是 app.exe 程序的支撑文件。在命令行窗口中运行该 app.exe 程序,同样可以看到与前一个 app.exe 程序相同的输出结果。

2.3 高级用法

当有特殊需求,比如打包图片资源文件时,就必须用到它的高级用法。

首先得了解spec文件,简而言之,spec文件就是一份告诉pyinstaller如何打包的配置文件。

可以通过pyi-makespec demo.py来生成demo.spec文件。其内容如下:

orts=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='workAttendanceSystem',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='workAttendanceSystem')

对于上面这个文件,需要注意两点:

  • 除了resources配置是我添加修改之外,其余全是自动生成,这个配置是用来添加资源文件的。
  • pathex是工程的根目录。

生成并配置好spec文件后,我们可以通过pyinstaller demo.spec来执行打包任务。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值