目录
1.pyInstaller打包命令简介
(1)新建一个python虚拟环境。
conda create -n your_name python=3.9
(2)激活将要使用的虚拟环境(如:your_name)
activate your_name
(3)安装打包的工具(提前安装pip工具)
pip install pyinstaller
(4)会自动将 pyInstaller 命令安装到 Python 解释器 目录中,pyinstaller 打包命令的基本语法
pyinstaller [--options] test.py
上述打包工具中的options是可以选择的-D产生一个目录包含exe和相应的环境,同时也是默认的打包工具(直接运行pyinstaller test.py即可)、-F产生单个的可执行文件等还可以(-w)设置控制控制台窗口。利用打包工具可以产生两个文件夹,第一个文件夹build用于构建可执行文件、第二个文件夹比较重要,用于应用程序的exe执行文件及其对应的所有依赖项。
2.资源的添加
打包过程中,经常面临着许多资源文件,如汉化文件、权重文件、及图片文件,其中对于普通文件可以有两种方式,不过都是异曲同工。
(1)使用命令
pyinstaller test.py --add-data "myfold;myfold"
此方式可以将myfold文件夹里面的内容全部打包进去,后边可以添加多个-add-data,从而达到多个资源的添加。
(2)使用.spec文件
a = Analysis(
['__main__.py'],
pathex=[],
binaries=[],
datas=[('icons', 'icons'), ('translate', 'translate'), ('config', 'config')],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
使用单个打包文件,生成.spec文件,在.spec的datas更改资源目录,如上图所示,注意路径要按实际进行(此方式不能将图片资源进行保存)
3.图片的资源添加
图片资源通过上述的方式是不能尽心资源的添加的,首先要将其转换为base64的格式,具体如代码
import base64
import os
def pictopy(picture_names, py_name):
"""
将图像文件转换为py文件
:param picture_name:
:return:
"""
write_data = []
for picture_name in picture_names:
filename = picture_name.replace('.', '_')
open_pic = open("%s" % picture_name, 'rb')
b64str = base64.b64encode(open_pic.read())
open_pic.close()
write_data.append('"%s" : "%s",\n' % (filename, b64str.decode()))
f = open('%s.py' % py_name, 'w+')
for data in write_data:
f.write(data)
f.close()
if __name__ == '__main__':
# 指定文件夹路径
folder_path = "D:\\GeniusWorld_jhz\\pyCharmProject\\testPicture"
# 获取文件夹中的所有文件名
file_names = os.listdir(folder_path)
# 过滤出以 ".png" 结尾的文件名
pics = [file_name for file_name in file_names if file_name.endswith(".png")]
# 输出结果
print(pics)
pictopy(pics, 'memory_picture') # 将pics里面的图片写到 memory_pic.py 中
print("ok")
上述功能是批量将文件夹中的图片生成数组,通过转换加到memory_picture.py中,为了方便调用可以写成下边的方式。
image_data = {
"aimask" : "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAA“,
}
在其他py文件中使用该数据就可以使用下面的引用
from memory_picture import image_data
如果是将其用作图标可以使用下边代码
image = base64.b64decode(image_data[icon])
# 创建QPixmap对象
pixmap = QtGui.QPixmap()
pixmap.loadFromData(image)
# 创建并返回QIcon对象
return QtGui.QIcon(pixmap)
上述是测试完成的结果,可以互相沟通交流,欢迎各位指导补充!!!