利用Pyinstaller将python代码打包生成exe文件(windows环境下)
程序员文章站
2022-03-30 18:54:39
...
一、Pyinstaller的安装
Pyinstaller的安装最简单的方法是利用pip安装:pip install pyinstaller。
二、Pyinstaller打包 对于pyinstaller的打包分为如下几种情况:
- Python代码中仅使用第三方库(或未使用第三方库)
对于这种情况,直接使用pyinstaller进行打包即可——在cmd状态下,cd切换到py文件所在的路径,然后pyinstaller -F 文件名.py 举例如下:
import cv2
img = cv2.imread("test.jpg")
cv2.imshow("show",img)
cv2.waitKey(0)
生成exe文件(在下图的dist文件夹中)后,点击运行效果如下:
对于包含用户自己编写的模块,有两种方法:第一种方法是把自己编写的模块与要打包的py文件放在同一目录下,然后直接打包即可;第二种方法是将自己编写的模块放到python的三方模块site-package文件夹中,然后再对py文件进行打包,方法如上。目录结构及myadd代码如下:
def myadd(a,b):
return a+b
要打包的py文件的代码如下:
from myadd import myadd
a = 3
b = 5
print(myadd(a,b))
input()
生成的exe文件(dist文件夹下)运行效果如下:
三、Pyinstaller打包存在的问题
目前本人做了个gui界面,并生成了相应的py文件,直接运行py文件是没有问题的,能够正常运行;但是打包exe文件时,会出现如下提示(Hidden import "PyQt5.Qt" not found):
打包完成后,双击exe文件,会出现如下错误!目前一直没有解决,希望走过路过的达人如果您解决了此问题,请帮忙留言一下,不胜感激。
上面例程的代码如下:
Ui_test_opencv.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'D:\Python\PyQt5\test_opencv.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
Dialog.setSizeGripEnabled(True)
self.pushButton_input = QtWidgets.QPushButton(Dialog)
self.pushButton_input.setGeometry(QtCore.QRect(40, 110, 93, 28))
self.pushButton_input.setObjectName("pushButton_input")
self.pushButton_close = QtWidgets.QPushButton(Dialog)
self.pushButton_close.setGeometry(QtCore.QRect(210, 110, 93, 28))
self.pushButton_close.setObjectName("pushButton_close")
self.label_show = QtWidgets.QLabel(Dialog)
self.label_show.setGeometry(QtCore.QRect(100, 50, 72, 15))
self.label_show.setObjectName("label_show")
self.retranslateUi(Dialog)
self.pushButton_close.clicked.connect(Dialog.close)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton_input.setText(_translate("Dialog", "打开图片"))
self.pushButton_close.setText(_translate("Dialog", "关闭"))
self.label_show.setText(_translate("Dialog", "结果显示"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
test_opencv.py
# -*- coding: utf-8 -*-
"""
Module implementing Test.
"""
import sys
import cv2
from Ui_test_opencv import Ui_Dialog
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog, QApplication
class Test(QDialog, Ui_Dialog):
"""
Class documentation goes here.
"""
def __init__(self, parent=None):
"""
Constructor
@param parent reference to the parent widget
@type QWidget
"""
super(Test, self).__init__(parent)
self.setupUi(self)
@pyqtSlot()
def on_pushButton_input_clicked(self):
"""
Slot documentation goes here.
"""
# TODO: not implemented yet
img = cv2.imread("test.jpg")
cv2.imshow("show", img)
self.label_show.setText("完成!")
app.py
import test_opencv
import sys
from PyQt5.QtWidgets import QApplication
if __name__ == '__main__':
app = QApplication(sys.argv)
dlg = test_opencv.Test()
dlg.show()
sys.exit(app.exec_())
代码的效果如下:
推荐阅读
-
Windows下将Python文件打包成.EXE可执行文件的方法
-
利用pyinstaller工具将Python脚本打包生成exe文件
-
python3 multiprocessing windows环境下 pyinstaller打包exe运行无限创建进程问题
-
Pyinstaller 打包 python变为exe 在 windows下免 python 环境运行 python
-
Windows pyinstaller将python文件打包成可执行文件exe
-
Pyinstaller 打包python 到exe 在windows下免python环境运行python
-
python3 关于pyinstaller在windows下打包.exe文件
-
Windows下将Python文件打包成.EXE可执行文件的方法
-
Python:pyinstaller如何将一个项目的.py和相关资源文件打包生成.exe文件
-
利用Pyinstaller将python代码打包生成exe文件(windows环境下)