python使用pyinstaller把程序进行打包
1 pyinstaller的安装与简单使用
1.1 pyinstaller的安装
1、安装方法一:使用pip安装
pip install pyinstaller
2、安装方法二:从pyinstaller官网下载源码安装(参考)
下载源码后进行解压,然后执行:
python setup.py install
1.2 pyinstaller对单个py文件进行打包成exe文件
1、首先来看一下打包的程序目录:
2、test.py程序功能:使用tkinter
创建一个窗口,把images/zly.png
图片显示在窗口中。程序如下:
import cv2
import numpy as np
from PIL import Image, ImageTk
import tkinter as tk
window = tk.Tk()
window.title('demo')
window.geometry('600x400')
image = cv2.imread('images/zly.png')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.resize(image, (500, 200))
image_pil = Image.fromarray(np.uint8(image))
canvas = tk.Canvas(window, width=500, height=200, bg='green')
image_file = ImageTk.PhotoImage(image=image_pil)
# 报错:AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo' 参数关键字是image,我写成Image所以报该错误,找半天!
image = canvas.create_image(500/2, 0, anchor='n', image=image_file) # 图片的锚定点anchor(这里就是值图像的上边缘的中间位置),放到画布的(x=0, y=0)的位置
canvas.pack(side='top')
window.mainloop()
3、pyinstaller -F对程序进行打包
pyinstaller -F test.py
打包后程序目录如下:
- xxx.spec:是记录打包的参数文件(打包好之后可以删除)
- build目录:打包过程中生成的文件(打包好之后可以删除)
- dist目录:打包生成的exe可执行文件存储在该目录下
4、这样就可以把该执行文件拷贝给其他人使用了,而其他人不需要再安装python编译器以及程序相关的python依赖库包。如下我把生成的可执行文件拷贝到桌面:
C:\Users\Administrator\Desktop\dist>tree /F
C:.
│ test.exe # 277MB
│
└─images
zly.png
C:\Users\Administrator\Desktop\dist>
注意:
程序中会读取
images/zly.png
科执行文件,所以当前可执行文件会在当前目录下找,因此需要把images目录拷贝到dist目录下。还有最好用相对路径,绝对路径拷贝到其他电脑由于路径问题可能会出问题!
可以看到,我们只打包一个简单的程序,打包出的exe文件就有277MB,这是因为程序会把python解释器,pillow、tkinter、numpy等依赖库包都打包到exe文件中,因此这也是使用pyinstaller打包exe程序比较臃肿的原因
!
到这里,你已经知道怎么使用pyinstaller打包一个py文件为可执行的exe文件啦,下面介绍pyinstaller的更多参数使用!
2 pyinstaller的更多参数使用
2.1 pyinstaller常用的参数
1、pyinstaller常用的参数
-
-F
:表示生成单个可执行文件,会把生成的exe可执行文件存放到dist目录下!
-
w
: 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧! -
p
: 表示你自己自定义需要加载的类
路径,一般情况下用不到。设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路。 -
i
: 表示可执行文件的图标,就是xxx.ico类型的图片
,如何生成ico图片可以:参考
2、pyinstaller更多参数可以使用-h查看
pyinstaller -h
3 pyinstaller常见生成exe文件常见错误
3.1 pyinstaller打包py文件的时候找不到libiomp5md.dll文件
1、在使用:pyinstaller -F test.py
生成可执行文件时报错:Unable to find "C:\software_install\Anaconda_install\Library\bin\libiomp5md.dll" when adding binary and data files.
2、全局搜索一下libiomp5md.dll
文件,会发现在Library\bin
目录下有这个文件的,只不过名字被我改为libiomp5md_bak.dll
(之前遇到了一个什么错误,需要删除该目录下的这个文件,所以我备份了一下
),只需要把备份的文件名改回libiomp5md.dll
即可解决上面的问题!
3.2 pyinstall打包的时候报enum相关错误
1、在使用:pyinstaller -F test.py
生成可执行文件时报错:AttributeError: module 'enum' has no attribute 'IntFlag'
2、解决方式:从python 3.6开始,enum34库不再与标准库兼容。该库也是不必要的,所以直接卸载即可:
pip uninstall enum34
参考:cpython.blog.csdn.net/article/det… 参考:blog.csdn.net/MaXiaoTianc…
转载自:https://juejin.cn/post/7159439978639360037