原文章
pip installer pyinstaller
通常打包程序有两种情况:
情况一,打包一个python脚本文件;
情况二,打包一个python项目程序(包含多个文件夹、py文件,以及相关资源文件)
对于只有一个python脚本的简单程序,打包操作很方便,直接使用命令行的方式,输入相关指令即可。
对于一个小程序(temp.py),如下:
import csv
'''
用csv模块写csv文件,
主要用到writerow和writerows这两个方法,
前者是写入一行,后者是写入多行。
'''
headers = ['name', 'age', 'honey', 'happy']
row_1 = ['小明', '17']
row_2 = ['小刚', '15']
row_3 = ['小元', '21']
row_4 = ['小雨', '23']
with open("data.csv", "a+", encoding='utf-8', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(headers)
# 写入一行
writer.writerow([row_1, row_2, row_3, row_4])
首先,打开终端cmd, 进入temp.py文件所在的路径,输入指令:pyinstaller -F temp.py
打包结束后,将在当前目录下生成两个文件夹(bulid、dist)和一个文件temp.spec
,现在不需要理会文件夹bulid
和文件temp.spec
我们需要的打包后的可执行文件在文件夹dist
中,双击即可运行,实现打包。
注意:如果想修改可执行文件的图标,使用指令:pyinstaller -i icon.ico -F temp.py
打包结束后,在dist文件夹下降出现temp.exe。你可能会发现它的图标并不是你想要的,这没有关系,你将它重命名或者拷贝到其他地方,你会发现它的图标立刻变成你期待的样子,祝你好运。
对于常用到的py项目程序,包含许多文件夹和py文件,以及配套的资源文件。这种情况下在终端中使用指令的方式打包程序本身也是可以实现的,但是此时打包操作就变得非常复杂。一个简单的打包方式,就是通过pyinstaller提供的spec文件
实现程序打包。
下面通过一个基于python
实现的项目的打包流程。
该项目包含六个文件夹,其中:bin、conf、core
包含所有的python脚本文件,项目入口程序在bin\
XXXX.py
,所有音频文件在audios文件夹下,所有的字体文件在fonts文件夹下,所有的图片文件在images文件夹下。
第一步:打开终端进入项目路径下,输入指令:pyinstaller -F bin\XXXX.py
,回车,程序结束后,发现当前目录下生成两个文件夹(bulid、dist)和一个文件XXXX.spec
,现在删除两个文件夹,只保留XXXX.spec
文件。
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['Display.py'],# 此列表存放项目设计的所有python脚本文件
pathex=['E:\\MyCode\\', 'E:\\MyCode\\Display'],# 此列表为项目绝对路径
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='Display',# 打包程序的名字
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=False,
upx_exclude=[],
runtime_tmpdir=None,
console=True,# 打包后的可执行文件双击运行时屏幕会出现一个cmd窗口,不影响原程序运行
icon='D:\\hahah.ico'# 如果想要修改程序图标,使用在EXE()中加入 icon='绝对路径',一定要注意设置程序图标是.ico格式文件(16*16)
)
XXXX.spec
文件。项目路径下输入指令:pyinstaller -F XXXX.spec
,