【踩坑日记(一)】: Pyinstall 打包.py文件 生成exe可执行文件

Pyinstall 打包.py文件 生成exe可执行文件

原本认为很轻松的事情,结果花了近2个小时才搞定,值得记录下踩的坑。

首先粗略小结一下这个python工具包的基本工作原理

一只测试媛的笔记梳理

就是说,如果需要这个工具包帮忙打包一下,形成.exe 文件,咱就只需要关注一件事:.spec 配置文件配对了没。

基本上,只要这个文件里路径配对了,生成可执行文件,不在话下😂

花花网络迷人眼,搜索引擎送来的坑都给我放哪儿了呢?就是文件路径的配置上!

不过咱们先看正确步骤(不浪费时间,有闲心的可以接着看步骤后的“如何出坑”):

pyinstall 工具包打包的正确步骤
1、生成配置文件:pyi-makespec [-w] 主文件(一般是main.py) 其他文件1 其他文件2
2、补充配置文件:主要确认是否有文件没有写进打包范围,打包路径是否正确,静态文件路径有没有配好,也可以指定生成的文件名
3、执行配置文件:pyinstaller xxx.spec
4、打包成功,去.\\工程文件\dist 文件夹下 可以找到你的可执行文件,双击运行~
如何入坑&出坑

搜索引擎提供的大部分方法都是一把梭哈的,就是直接给你一个超长的命令行,告诉你应该填的命令+对象

但实际上,你的打包情况是复杂的,比如,多个文件可能是跨多model的,或者某个文件的层级很深,跟主文件根本不在一个目录

配置文件 .spec 是结构性的文件,配置项都给你准备好了,正常的思路应该是去了解配置文件允许你填什么/要求填什么,这决定它是根据什么条件去给你打包的,这就跟我们写程序是一样的,我们需要根据工具提供的参数来使用,否则就是在测bug了,并且大部分还是主观意义下的bug,这显然毫无意义,但大部分搜索引擎提供的结果却基本都是如此,对基本使用原理给的很模糊:

比如,直接告诉你,根据xxx命令一条命令行,就能大力出奇迹

再比如,有些连参数作用都没搞明白的,就开始瞎教,说配某个参数就能执行,比较典型的是[-p] 参数的用法,这个参数明明是用来配用到的模块的路径的,对应的是配置文件里的pathex 选项,大部分文章却说这是配其他文件的,这样的指导显然不能让使用者据此得到正常的期望结果。

所以,还是先从配置文件本身了解吧:

# -*- mode: python ; coding: utf-8 -*-
#兼容的写法


block_cipher = None
'''
Analysis类的实例,主要分析.py文件的依赖项。
如,第三方库,以及import模块。
scripts:py文件
pure :纯python模块,包括程序的代码文件本身
binaries:需要的二进制文件
datas:非二进制文件,例如icon
'''
a = Analysis(
    ['main.py', 'OOP_GUI_CREATE_TEST_DATA.py', 'OOP_test_date_create.py'],
    # 你要打包的文件名,如果偷懒,可以和main文件放一个目录
    # 不在一个目录的时候,要写绝对路径
    pathex=[],
    #用来存放用到模块路径,例如PYTHONPATH
    binaries=[],
    #添加二进制文件,也是一个列表,定义方式与datas参数一样
    datas=[],
    #非二进制文件
    hiddenimports=[],
    #隐式导入的模块,比如在__import__、eval等语句中导入的模块,这些模块Pyinstall是找不到的,需要手动指定导入。
    hookspath=[],
    #hookspath,指定额外的hook文件(可以是py文件)的查找路径。
    hooksconfig={},
    runtime_hooks=[],
    #指定自定义的运行时hook文件路径(可以是py文件)
    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='main',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
)
coll = COLLECT(
    exe,
    a.binaries,
    a.zipfiles,
    a.datas,
    strip=False,
    upx=True,
    upx_exclude=[],
    name='main',
)
Analysis 实例

除了scriptsde 的添加,datas的添加暂时没用到过其他的(跨平台部署也没用到过),如果后续有用到的其他属性,会在这里继续更新~

属性解释
scripts必填,由脚本文件名组成的list
pathex选填,spec文件路径,通常是跨平台才会用这个
binaries选填,二进制文件
datas选填,非二进制文件
hiddenimport选填,如果用了些隐式的模块,才需要填这个,因为Pyinstall不能主动帮你加载隐式model
hookspath选填,hook或者hook-modules路径
hooksconfig选填,hook或者hook-modeles的配置文件
excludes选填,模块或包名,不能填路径名,这些包/模块将会被忽略,不打包
runtime_hooks选填,用作用户运行时可选hook脚本列表(填文件名)
cipher添加 pyz_crypto.PyiBlockCipher 类的可选实例(使用提供的密钥)。
win_no_prefer_redirectsTrue,在搜索 Windows SxS 程序集时不希望遵循版本重定向。默认False
win_private_assembliesTrue, 则将所有捆绑的 Windows SxS 程序集更改为私有程序集以强制执行,默认False
noarchiveTrue,则不要将源文件放在存档中,而是将它们作为单独的文件保存。默认False
其他实例
PYZ 实例.pzy文件,包含pure中的所有Python模块
EXE 实例处理Analysis 和PYZ的结果,用来生成最后的exe可执行文件
COLLECT 实例用于创建输出目录,只有-D命令下才会实例化,-F不会生成目录
常用参数
参数名称含义
-h查看帮助信息:pyinstaller -h
-p DIR, --paths DIR-p DIR 或者 --paths DIR 搜索导入的路径(例如使用 PYTHONPATH)。 允许多个路径,由 ; 分隔,或多次使用此选项。 等效于在规范文件中提供 pathex 参数。
-F, --onefile创建一个单一文件捆绑的可执行文件。
-D,–onedir创建一个包含可执行文件的单文件夹包(默认)
-n NAME, --name NAME分配给捆绑的应用程序和规范文件的名称(默认值:第一个脚本的基本名称)
–clean在构建之前清理 PyInstaller 缓存并删除临时文件。
pyi-makespec mainNAME.py单纯构建一个spec配置文件
参考文档:Pyinstall 官方手册

Pyinstall官方手册

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值