pyinstaller踩过的坑
1 基础环境
python 2.7.17
pyinstaller 3.5
安装pyinstaller
pip install pyinstaller
2 解决几个打包后运行会出现的问题
2.1 打包后图标模糊的问题
图标模糊是因为ico文件分辨率的问题,需要打包为多个尺寸的,这样在文件夹里、桌面上、任务栏、开始屏幕上会自动采用不同分辨率的图标
生成应用图标ico
图标必须为.ico
格式,且需要有多种尺寸的,包括16*16,、32*32、48*48、64*64、128*128、256*256
,可以在这个网站进行打包https://www.aconvert.com/icon/
2.2 设置应用图标后,打包后运行不展示图标
需要修改代码,引用图标的地方需要指定路径
先写一个方法,如下:
def rp(relative_path):
""" Get absolute path to resource, works for dev and for PyInstaller """
try:
# PyInstaller creates a temp folder and stores path in _MEIPASS
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
在引用ico文件的地方,用这个方法包裹下,如下:
2.3 解决任务栏图标不正确的问题
因为windows会任务打包后的成为是python,所以任务栏展示的是python图标
我们只需要指定一个id即可,如下:
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("todo_task")
2.4 打包运行后找不到模块的问题
3 打包流程
3.1 生成.spec文件
执行命令:
pyi-makespec -F main.py
3.2 修改spec文件内容
主要修改三个地方
1、修改datas
,设置静态文件的路径,如下:
2、在spec中配置应用图标路径,如下:
3、设置打开exe时不弹出cmd窗口
4、解决找不到包的问题
运行exe报ModuleNotFoundError: No module named 'xxx'
是因为打包的时候没有指定三方包的路径
比如我们是在虚拟环境中的运行的工程,我们三方的包也是装在虚拟环境中的
在pathex中配置虚拟环境路径,如下:
3.3 打包
执行命令:
pyinstaller -F main.spec