当前位置: 首页 > news >正文

Python中的图片打包与pyinstaller中的spec文件简介

一.Python中的图片打包

1.经过科学搜索后有以下几种打包方式:

①将图片转化为py文件中的变量,通过import该文件来生成需要的图片,使用后移除图片

(该方法可以通过库base64和wxpython实现)

②将图片放在同一目录下的文件夹中,随程序一起使用

③使用工具对exe文件和图片进行二次打包

可能还有其他方式,在此只列取这几种

 

2.本人比较懒,选择的是较为方便好看的第一种方式,其他方式就不讨论了:

①base64

将图片转化为base64编码的py文件中的变量

import base64
 
def pic2py(picture_name):
    open_pic = open("%s" % picture_name, 'rb')
    b64str = base64.b64encode(open_pic.read())
    open_pic.close()
    
    # 注意这边b64str一定要加上.decode()
    write_data = 'img = "%s"' % b64str.decode()
    f = open('%s.py' % picture_name.replace('.', '_'), 'w+')
    f.write(write_data)
    f.close()
 
if __name__ == '__main__':
    name = input("你想转化的图片的完整文件名:")
    pic2py(name)

#使用方式如下

'''
from in_ico import img
...
tmp = open('in.ico', 'wb')
tmp.write(base64.b64decode(img))
tmp.close()

#使用图片

os.remove('in.ico')
'''

②wxpython

安装wxpython库后,在命令框中使用命令:

python img2py.py -n = 引用图片名(含格式) -i = 生成py文件名(含.py)

得到一个py文件,图片已转化为该文件中的一个二进制编码的变量,通过类似上一种方法中的使用方法,解码后即可使用

 

二.pyinstaller中的spec文件

1.可以在官网了解一下

简单介绍:

通过pyi-makespec name.py命令来生成一个自定义的spec文件

# -*- mode: python -*-

block_cipher = None


a = Analysis(['name.py'],
             pathex=['D:\\ME'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          exclude_binaries=True,
          name='name',
          debug=False,
          strip=False,
          upx=True,
          console=True )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=True,
               name='name')

spec文件分为Analysis, pyz, exe, coll四个部分

①Analysis:首先是需要打包的py文件,通过一个字符串列表储存;然后是py文件的路径;datas是需要引用的文件(图片等)

②exe:要生成exe文件时,name是exe文件的名字, console是是否在打开exe文件时打开命令框

③coll:收集前三个部分的内容进行整合

 

pyinstaller通过最开始生成的spec文件进行打包,也可以自定义spec文件后,使用pyinstaller -F name.spec命令来打包

 

2.打包后的spec文件

如果使用了--add-data命令后, 在Analysis中的datas中出现引用的图片的名称;使用-i 命令后,在exe在最后会出现icon = 图标名。

 

注意:使用--add-data命令时,使用方式如:--add-data 图片名;位置(同一目录下可以用.)

该命令可以打包使用绝对路径引用的图片,但一旦通过该路径找不到图片时即会报错(如在其他电脑上打开exe文件,原路径上图片删除或转移)

相关文章:

  • GUI编程练习(Python)-自制简易的文件检索器
  • 关于windows中host文件的修改
  • Python-自制简易程序挂机刷御魂
  • Python-使用geany编辑器实现32位与64位共存使用
  • python-五子棋-AI
  • Python-从视频到gif(imageio,moviepy,ffmpeg)
  • python-二分法插入排序(Binary Insert Sort)
  • 本地仓库关联Github仓库
  • macos可以升级到指定版本吗_iPhone 越狱后还可以保资料升级系统吗?
  • 2 shell 锂基脂_内蒙古锂基脂润滑油供应商
  • python编程中的不等于符号_python不等于符号怎么写
  • nacos 负载策略_Ribbon负载均衡
  • python文件传输模块_Python爱好者 socket模块传输文件 -
  • 红曲面怎么做_曲面屏是华为手机一大败笔?确实缺点很多,但华为为何钟爱呢?...
  • 高德地图 python面试_【高德地图面试|面试题】-看准网
  • 深入了解以太坊
  • 【347天】每日项目总结系列085(2018.01.18)
  • Angular数据绑定机制
  • java第三方包学习之lombok
  • Js基础知识(四) - js运行原理与机制
  • nodejs实现webservice问题总结
  • Octave 入门
  • PHP 7 修改了什么呢 -- 2
  • tab.js分享及浏览器兼容性问题汇总
  • 大数据与云计算学习:数据分析(二)
  • 前端临床手札——文件上传
  • 设计模式 开闭原则
  • 树莓派 - 使用须知
  • 新手搭建网站的主要流程
  • 终端用户监控:真实用户监控还是模拟监控?
  • 正则表达式-基础知识Review
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Linux(权限管理)
  • #pragma multi_compile #pragma shader_feature
  • #QT项目实战(天气预报)
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (52)只出现一次的数字III
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (理论篇)httpmoudle和httphandler一览
  • (利用IDEA+Maven)定制属于自己的jar包
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一) storm的集群安装与配置
  • (转) RFS+AutoItLibrary测试web对话框
  • (转载)hibernate缓存
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core跨平台微服务学习资源
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net 高效开发之不可错过的实用工具
  • .net6使用Sejil可视化日志