python程序带图片等资源打包

1
2
3
#在打包时,都需要将终端运行地址切换到要打包文件的父目录下
#在终端中运行以下代码
cd 父目录地址

1,常规打包

1
2
3
4
5
6
7
Pyinstaller -F py_word.py     #打包成单独exe,在文件夹dist中的单独文件

Pyinstaller -F -w py_word.py  #不带控制台的打包,不建议,会导致静默运行,只能从运行管理器中找到并停止

Pyinstaller -F -w -i chengzi.ico py_word.py  #打包指定exe图标打包

pyinstaller -F --uac-admin word.py #打包的程序以管理员身份运行

如果打包过大,可以使用anaconda创建虚拟环境只下载需要的第三方库。

2,带资源打包

2.1 首先解决的问题:打包后代码里资源的地址会因在不同环境下运行而不同。

首先需要将图片放到代码同级文件夹内,同时更新代码内的图片地址,这样做是为了后期能够批量打包图片等资源。

这里通过文件运行的绝对路径结合图片的相对路径来生成图片的绝对路径。将以下函数代码复制到打包代码中:

1
2
3
4
def get_resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)

定义了函数后,将代码里的图片地址统一换为:

1
get_resource_path('原代码里的图片地址')

2.2 开始进行打包

  1. -add-data后面可以加=,也可以直接空格,效果一样。
  2. -add-data后面的参数值里,有两部分,用 : 或者 ;隔开,前面是指打包前文件所在的位置,后面是指打包后你希望文件所在的位置。比如样例里的:-add-data="image1.png:img" 的意思是把当前目录里一个叫 “image1.png” 的文件打包进去,但是放在打包后的 “img” 目录下,也就是变成 img/image1.png,文件名不变。
  3. -add-data可以用好多次,也就是可以一个文件一个文件地加。
  4. 整个文件夹一起加:-add-data 'images:images' 也就是把当前目录下 images 文件夹里的文件都打包进去,打包后的目录也是 images 一样的文件夹下。

最终在终端运行的代码:

1
pyinstaller --add-data 'images:images' -F --uac-admin py_name.py

python程序带图片等资源打包
https://jimes.cn/2024/01/12/python程序带图片等资源打包/
作者
Jimes
发布于
2024年1月12日
许可协议