从.py到.exe的完全手册(包含PyQt5界面)

应网友需求,写一个从.py文件开始,生成界面,然后打包发布exe程序的教程

第一步 :编写你的py文件,实现你想要的功能

这里主要是为了演示整个流程,所以就拿一个之前做的爬虫程序来做演示,可以按照当日销量、两小时销量一键爬取淘宝上的商品,生成二维码,保存在本地。具体的程序不是重点,先不说,下次有机会再聊。

第二步:用QTdesigner生成界面

用Python写界面–上位机开发
看这个教程可以生成你的界面,我把我生成的gui.py文件贴到下面,你们可以直接拿过去用

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ui.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_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(759, 436)
        MainWindow.setToolTip("")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(110, 100, 521, 71))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(110, 240, 521, 71))
        self.pushButton_2.setObjectName("pushButton_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 759, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "自动生成淘宝二维码图片"))
        MainWindow.setStatusTip(_translate("MainWindow", "Writen by Li-Bo"))
        self.pushButton.setText(_translate("MainWindow", "点击生成当天销量排行"))
        self.pushButton_2.setText(_translate("MainWindow", "点击生成两小时销量排行"))

第三步:调用界面,生成界面

直接上程序

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author —— 李博
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow
import time
import logging

import ui

Ui_MainWindow = ui.Ui_MainWindow

class MyApp(QMainWindow, Ui_MainWindow):

    def __init__(self):
        super().__init__()
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.createButtons()

    def get_top_day_goods(self):
        with open("top_day.txt", "w") as f:
            for index in range(100):
                f.write(str(index)+ "\n")

    def get_top_hour_goods(self):
        with open("top_hours.txt", "w") as f:
            for index2 in range(100):
                f.write(str(index2) + "\n")

    def createButtons(self):
        self.pushButton.clicked.connect(self.get_top_day_goods)
        self.pushButton_2.clicked.connect(self.get_top_hour_goods)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

第四步:打包发布EXE程序

4.1 安装pyinstaller

pip install pyinstaller

4.2 pyinstaller用法

cd到想要打包为exe程序的文件所在目录,将想要打包的文件全部放入这个目录,本例中要放入两个:ui.pymain.py

pyinstaller [opts] program.py

以下是所以可选的命令

命令含义
-F, –onefile产生一个文件用于部署 (参见XXXXX).
-D, –onedir产生一个目录用于部署 (默认)
-K, –tk在部署时包含 TCL/TK
-a, –ascii不包含编码.在支持Unicode的python版本上默认包含所有的编码.
-d, –debug产生debug版本的可执行文件
-w,–windowed,–noconsole使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
-c,–nowindowed,–console使用控制台子系统执行(默认)(只对Windows有效)
-s,–strip可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用.
-X, –upx如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note)
-o DIR, –out=DIR指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.
-p DIR, –path=DIR设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,Linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径
–icon=将file.ico添加为可执行文件的资源(只对Windows系统有效)
–icon=将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)
-v FILE, –version=FILE将verfile作为可执行文件的版本资源(只对Windows系统有效)
-n NAME, –name=NAME可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字

4.3 本例中打包

要注意的一点是本文中用到了PyQt5作为界面,因此打包时要添加–paths来指定PyQt5的路径(ps:你要针对自己的安装路径进行修改):

--paths=C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\bin
--paths=C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\plugins

因此,cd到指定目录后,执行以下命令:

pyinstaller -F -w --paths=C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\bin --paths=C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\plugins  main.py

是不是感觉太长了,那么我们写一个文件,让他自动执行,如下所示:

#!/usr/bin/env python3
# -\- coding: utf-8 -\-
from PyInstaller.__main__ import run
# -F:打包成一个EXE文件 
# -w:不带console输出控制台,window窗体格式 
# --paths:依赖包路径 
# --icon:图标 
# --noupx:不用upx压缩 
# --clean:清理掉临时文件

if __name__ == '__main__':
    opts = ['-F', '-w', '--paths=C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\bin',
            '--paths=C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\Lib\site-packages\PyQt5\Qt\plugins',
            '--noupx', '--clean',
            'main.py']
    run(opts)

4.4 生成的界面

未生成前目录内容

生成的目录
打开生成的程序

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值