• run.exe:已经编译好的文件,负责解压exe中的资源包,创建运行环境
  • pure:pyi分析用户程序及其依赖库,得到的所有需要导入的模块,但不包括dependencies
  • dependencies:pyi本身,包含5个文件
  • scripts:用户编写的脚本
  • binary:有些python库使用了非python库,binary是这些库的集合,包括 .dll和 .pyd
  • zipfiles:一般为空
  • zipped_data:一般为空
  • datas:各种资源,包括pyi识别出来的和用户主动添加的

exe格式(onefile)

  • exe = run.exe + pkg
  • pkg(CArchive) = pyz + dependencies + scripts + binary + zipfiles + datas + python36.dll
  • pyz(ZlibArchive) = pure + zipped_data

exe格式(onedir)

  • exe = run.exe + pkg
  • pkg(CArchive) = pyz + dependencies + scripts
  • pyz(ZlibArchive) = pure + zipped_data

各文件存储格式说明

  • pure:将module加载到内存,用mashal处理,用zlib压缩后存储。
    • 如果module本身是py,存储的是import后的内存模型
    • 如果module本身是pyd,存储的是dll加载后的内存模型
  • dependencies:同pure
  • binary:zlib压缩后存储
  • datas:同binary

PyInstaller exe(onefile)执行过程

  1. 启动exe
  2. 解压exe中的pkg到临时目录
  3. 启动 子进程 并等待完成
  4. 删除临时目录,清理环境
  1. 设置各种环境变量,初始化python环境
  2. 直接运行dependencies和scripts
  3. 返回主进程

exe(onefile)和exe(onedir)比较

  • onedir存储的数据没有压缩,最终文件较多较大;onefile 存储的各种数据经过压缩,最终的包较小。比例大约为3:1
  • 对任一python模块,两者都没有直接存储pyc或源码,而是以pyz的形式存储,并且不会解压到磁盘
  • 任何python import语句都经过特殊处理,优先从pyz中加载模块。这一操作完全在内存中实现
  • 如果想要优化大小,onedir模式只需要删除无用的文件就可以,onefile模式需要提供合适的命令行参数。

关于CArchive和ZlibArchive

  • CArchive和ZlibArchive是PyInstaller内部的两种文件格式
  • CArchive的文件扩展名是.pkg
  • ZlibArchive的扩展名是.pyz
  • CArchive内部包含ZlibArchive,在执行生成的exe时,CArchive里面的大多数内容会被解压到临时目录,但ZlibArchive仍然存在于内存中
  • ZlibArchive中存储的是用户程序依赖的python第三方库,当程序执行到import somemodule语句时,exe会从ZlibArchive中搜索somemodule,直接载入到python解释器中,没有任何硬盘操作。
PyInstaller生成的exe(onefile)文件结构exe = run.exe + pkgpkg(CArchive) = pyz + dependencies + scripts + binary + zipfiles + datas + python36.dllpyz(ZlibArchive) = pure + zipped_data+++++++++++++++++++++... 参照:https://blog.csdn.net/m0_37477175/article/details/82146996 我采用的是 pyinstaller 打包, 第一步,采用 pyinstaller 打包会 生成 对应的.spec 文件 。 第二步,编辑对应的.spec 文件 ,将需...
Python Pyinstaller 打包 exe 文件 记录 pyinstaller -F 数据 结构 转建表语句_V3.0.py -w -n JJ工具_建表SQL自动 生成 (数据 结构 版) -i jj_sjjg.ico -F: 生成 单个 文件 ,无法查看内容 -D: 生成 文件 目录,便于修改 -w:跳过windows console窗口 -n:更改 生成 exe 文件 文件 目录名字 - i:修改图标 多个.py 文件 和多个打包命令格式如下: pyinstaller [主 文件 ] -p [其他 文件 1] -p [其他 文件 2] --hidden-import [自建模块1] --hidden-import [自建模块2] 根据上面的 文件 结构 打包命令如下 pyin...
Python进阶(四十七)-python3使用 pyinstaller 实现将py 文件 打包成 exe 文件 前言  py 文件 通常需要运行在Python编程坏境中,而可执行 exe 文件 更方便。   之前看过若干博文在python2环境下使用 pyinstaller 将py 文件 打包成 exe 文件 ,因为之前 pyinstaller 不支持python3。现在 pyinstaller 支持python3,此篇博文即是在python
2、输入【F:】进入F盘 3、输入【cd cs01】进入F盘的cs01 文件 夹(里面存放着要打包的xxx.py 文件 ) 4、pyinstall -F xxx.py (直接打包成 exe 文件 ,没图标ico,会有黑色窗口) 5、 pyinstaller -F -i test.ico test.py (打包成 exe 文件 ,带有test.ico图标,会有黑色窗口) 6、 pyinstaller -w -i aa.ico -F aaa.py (打包成 exe 文件 ,带aa.ico图标,没有黑色窗口) 7、pyinst 考虑到代码、数据的隐私安全,所以我们就需要使用 PyInstaller 将自己的运行主程序打包起来,从而创建得到独立应用(自包含该应用的依赖包)。最重要的是可以使用 PyInstaller 将 Python 程序 生成 可直接运行的程序,这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上运行。 2.安装 pyInstaller 安装 pyInstalle...
PyInstaller 是一个用来将Python程序打包成可执行 文件 的工具。要使用 PyInstaller 生成 macOS可执行 文件 ,首先需要在macOS系统中安装 PyInstaller 。安装完成后,使用命令行进入到Python程序所在目录,并输入命令: pyinstaller xxx.py 其中xxx.py是你要打包的Python程序 文件 名。 PyInstaller 会自动分析程序依赖关系,并将所有需要的 文件 打包到一个可执行 文件 中。 生成 的可执行 文件 位于dist目录中。