likes
comments
collection
share

python使用pyinstaller把程序进行打包

作者站长头像
站长
· 阅读数 5

1 pyinstaller的安装与简单使用

1.1 pyinstaller的安装

1、安装方法一:使用pip安装

pip install pyinstaller

2、安装方法二:从pyinstaller官网下载源码安装(参考

下载源码后进行解压,然后执行:

python setup.py install

1.2 pyinstaller对单个py文件进行打包成exe文件

1、首先来看一下打包的程序目录:

python使用pyinstaller把程序进行打包

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可执行文件存储在该目录下

python使用pyinstaller把程序进行打包

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.

python使用pyinstaller把程序进行打包

2、全局搜索一下libiomp5md.dll文件,会发现在Library\bin目录下有这个文件的,只不过名字被我改为libiomp5md_bak.dll(之前遇到了一个什么错误,需要删除该目录下的这个文件,所以我备份了一下),只需要把备份的文件名改回libiomp5md.dll即可解决上面的问题!

python使用pyinstaller把程序进行打包

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…