分享

Python程序打包—使用 Pyinstaller 打包资源文件

 UINOTE 2023-11-09 发布于江苏

打包资源文件

如果你的程序中使用到了非 Python 的资源文件,仅使用之前的方式打包,程序会无法读取到这些文件。因为 Pyinstaller 并不会自动的将它们打包进去。但是我们可以通过--add-data命令或者手动去更改.spec文件来实现资源文件的打包。话不多说,我们开始实操。

使用--add-data命令

pyinstaller -w --add-data 'res:res' --add-data './config.ini:.' main.py

--add-data后紧跟源目录:目标目录比如:

res:res表示,将源目录下的📁res 复制到目标目录的📁res

./config.ini:.表示将源目录下的📄config.ini 复制到根目录下,.表示根目录。

修改 Spec 文件

打包的时候,程序同路径下会生成一个同名的📄.spec,这个文件是打包的 “中间文件”,我们可以通过修改这个文件的内容来实现添加资源文件的目的。

Spec文件分析

.spec文件中主要包含4部分:AnalysisPYZEXECOLLECT

  • · Analysis:这部分包括指定要分析的 Python 脚本、导入模块和数据文件的信息。

  • · pyz:指定如何捆绑依赖项。可以指定将所有依赖项打包到单个可执行文件中,也可以选择将它们存储在单独的文件夹中。

  • · exe:这是生成的可执行文件的配置部分,包括可执行文件的名称、图标、命令行选项等.

  • · coll:主要是输出信息.

Spec文件修改

想要添加资源文件,需要修改Analysisdatas数组的内容,默认一般是空的:

# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
             ......
             datas=[],
             ......
             )

datas里边的元素是以元组的形式来存储的,有这么一个映射关系:

datas = [('源文件路径','目标路径')]

如果有多个文件需要拷贝到程序中,就多写几个元组,记得映射关系不要搞错.

📗有一点比较特殊:如果目标路径是打包后的根目录,那就写.

打包命令

在修改完.Spec文件后,重新运行打包命令即可。

pyinstaller -D xx.spec

不过后边的对象不再是xx.py文件,而是xx.spec文件。

示例演示

示例代码

本代码使用到了PySimpleGUI库,需要先安装该库,安装命令 pip install pysimplegui

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@文件    :test.py
@说明    :使用Pysimplegui实现一个简单的窗口,并加载 icon.png 图片
@时间    :2023/10/13 09:44:46
@作者    :aliha
@版本    :1.0
'''


import PySimpleGUI as sg  

layout = [
    [sg.Image('./ico.png')],  # 加载根目录下的图片      
    [sg.Submit('确认'), sg.Cancel('取消')]


window = sg.Window('Demo示例', layout)  

event, values = window.read()

项目目录结构如下:

├── 🖼️icon.png
└── 📄test.py

执行打包

先运行之前的打包命令,为了生成.Spec文件

pyinstaller test.py

修改.Spec文件,实现将icon.png打包进去

# ...省略部分代码
datas = [('./icon.png','.')]
# ...省略部分代码

('./ico.png','.')表示将ico.png复制到打包目录的根目录下(.表示根目录)

运行打包命令:

pyinstaller -D test.spec

打包效果展示

📁dist 目录结构如下:

├── 📁_internal
|    ├── 此处省略很多文件
|    └── 🖼️icon.png
└── 📄test.exe

📢:因为最新版本的 Pyinstaller 改变了打包的目录结构,将可执行文件(exe)和其他文件分离了,所以目录结构变成了如上的样子。

总结

至此,我们基本就能够使用 Pyinstaller 来应对各种打包场景了,当然它不仅仅支持这么点点的功能,更多的功能大家就查看官方文档慢慢研究吧。

图片


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多