打包python程序最常用的是用pyinstaller这个工具,没有的小伙伴pip install pyinstaller直接安装就行了。
一、打包单个文件 - pyinstaller 的用法
我这里使用的pycharm的命令窗口,执行后,生成的exe在dist文件夹下。打包命令如下:
pyinstaller -F 你的python程序.py
当然也可以加一些参数,-w: 取消控制台显示
-n: 自定义.exe的名字
二、打包包含多个资源文件 - pyinstaller 的用法
有时候,我们的py程序可能引用到一些pic.png图片等资源文件,如果想打包成一个exe,按照下面步骤操作,打包后的exe一般都没什么问题:
1。把图片转成.py文件用于引用
- 使用base64编码方式对程序中所使用的图片进行编码操作
import base64
def pic2py(picture_names: list, py_name):
write_data = []
for picture_name in picture_names:
filename = picture_name.replace('.', '_')
with open("%s" % picture_name, 'rb') as r:
b64str = base64.b64encode(r.read())
# 注意这边 b64str 一定要加上.decode()
write_data.append('%s = "%s"\n' % (filename, b64str.decode()))
with open(f'{py_name}.py', 'w+') as w:
for data in write_data:
w.write(data)
# 需要转码的图片:
pics = ["./pic.png"]
# 将pics里面的图片写到 image.py 中
pic2py(pics, 'image')
- 程序会生成一个image.py的python脚本,里面包含了你的资源图片
第二步:在主程序中导入image.py脚本引用,将图片编码在转成图片即可,引用方式如下:
from image import *
# 引用示例,pic.png,注意 转码后名字是pic_png
self.root.iconbitmap(image.pic_png)
到此,知道了图片的引用方式,打包py文件就简单了,
2。这里再介绍一种打包主程序的方式:
通过spec文件打包。这个文件是怎么来的呢?是根据我们的主程序mypython.py通过命令
pyinstaller .\generate_app.py
自动创建,也可以手动创建,它长酱紫:
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['generate_app.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
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='generate_app',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
当然.spec里的参数,比如'name','debug'可以随意修改,然后执行下面命令打包,就大工搞成了!
pyinstaller .\generate_app.spec
总结,包含图片等资源文件的打包方法:
- 把资源文件转成.py
- 修改主程序的图片引用
- 创建.spec文件,做相应需求修改,执行 pyinstaller xxxx.spec