您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

python打包exe 小工具

时间:2021-04-06 12:02:50  来源:今日头条  作者:爱在初夏夜

不知道有没有菜鸟和我一样,经常需要把Python/ target=_blank class=infotextkey>Python打包成exe,但是比较懒,虽然命令行很简单,但是不太喜欢用命令行,嘿嘿,就干脆写个小工具专门用来打包exe,方便自己用。

多写代码,就当练习了。成品如下图。

python懒人小工具:python打包exe 小工具

 

使用效果如下图,输入py源文件的完整地址,点击打包exe按钮,然后就能在源文件目录下的dist里打包成exe了。

python懒人小工具:python打包exe 小工具

 


python懒人小工具:python打包exe 小工具

 

原理很简单,就是利用os.system这个函数来执行cmd命令,用pyinstaller来打包。

完整源代码在文章末尾。

笔记时间


 

Python执行cmd命令行的方法:os.system

import os
os.system("dir")

就能执行dir命令,如果想连续执行多条命令,必须要在同一个子程里写完,比如我们打包exe需要先cd 到源文件目录,再用pyinstaller 打包,必须要把2条命令用&&连接起来

python懒人小工具:python打包exe 小工具

 

如果分成2个命令,如下面的写法,这2个命令是无法连续生效的

os.system("cd C:aa")
s.system("pyinstaller -F -w 1.py")

 

pyqt5 弹出消息框 QMessageBox

弹出消息框,用QMessageBox,如下代码

from PyQt5.QtWidgets import QMessageBox
QMessageBox.about(mainWindow, "执行结果", "恭喜!成功打包exe")

python 简单处理文件路径 PurewindowsPath

如下图,用pathlib即可,可以轻松地从完整路径类似“C:Users111.py”,得到我们想要的文件名 "1.py",得到我们要的目录 "C:Users11"

python懒人小工具:python打包exe 小工具

 

pyqt5打包中文路径的解决方法

这个问题我遇到很多次,因为我的windows用户名是中文,每次打包pyqt5的程序,就会报错,如下图,会提示找不到pyqt5插件,困扰我很长时间,最终在网上找到了解决方案

python懒人小工具:python打包exe 小工具

 

解决方案如下

把中文路径下的pyqt5文件夹,全部复制到一个全英文目录下,比如复制到C:pyPyQt5,然后Pyintaller命令里加上一个 -p C:pyPyQt5 ,指定插件目录,即可正确编译成exe!

 

其他的没什么了,这个比较简单,常见的pyqt5 gui,控件绑定函数之类的可以参见我之前的笔记。

完整源码如下

main.py

import Ui_py2exe
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QMessageBox
import os
from pathlib import PureWindowsPath

def dabao():
    fullpath=ui.lineEdit.text()
    f=PureWindowsPath(fullpath)
    filedir=fullpath.replace(f.name,"")
    if ui.checkBox.isChecked()==True:
        second=os.system("cd "+filedir+"&&pyinstaller -F -w "+fullpath)
        if second==0 :
            QMessageBox.about(mainWindow, "执行结果", "恭喜!成功打包exe")
        else:
            QMessageBox.about(mainWindow, "执行结果", "未知错误")
    else:
        second=os.system("cd "+filedir+"&&pyinstaller -F "+fullpath)
        if second==0 :
            QMessageBox.about(mainWindow, "执行结果", "恭喜,成功打包exe")
        else:
            QMessageBox.about(mainWindow, "执行结果", "未知错误")

if __name__=="__main__":
    app=QApplication(sys.argv)
    #创建一个窗口
    mainWindow=QMainWindow()
    ui=Ui_py2exe.Ui_MainWindow()
    ui.setupUi(mainWindow)
    ui.pushButton_2.clicked.connect(dabao)
    mainWindow.show()
    sys.exit(app.exec_())

还有一个qtdesigner生成的ui文件

Ui_py2exe.py

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

# Form implementation generated from reading ui file 'c:Users谭鸿伟Documentspythonworks10-py2exepy2exe.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(650, 290)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(180, 20, 381, 31))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(70, 30, 101, 16))
        self.label.setObjectName("label")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(310, 120, 141, 21))
        self.checkBox.setObjectName("checkBox")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(230, 160, 271, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(80, 80, 81, 16))
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(180, 70, 381, 31))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(170, 200, 431, 31))
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 650, 23))
        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", "py2exe by 爱在初夏夜"))
        self.label.setText(_translate("MainWindow", "Py文件完整路径:"))
        self.checkBox.setText(_translate("MainWindow", "隐藏CMD窗口"))
        self.pushButton_2.setText(_translate("MainWindow", "包成exe"))
        self.label_2.setText(_translate("MainWindow", "文件图标路径:"))
        self.label_3.setText(_translate("MainWindow", "exe保存路径为源文件所在文件夹的dist目录里"))


Tags:python打包   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
不知道有没有菜鸟和我一样,经常需要把python打包成exe,但是比较懒,虽然命令行很简单,但是不太喜欢用命令行,嘿嘿,就干脆写个小工具专门用来打包exe,方便自己用。多写代码,就当练习了...【详细内容】
2021-04-06  Tags: python打包  点击:(367)  评论:(0)  加入收藏
为了把python程序发布到没有安装python解释器的Windows环境中使用,需要打包成exe可执行文件。现在常见的python打包工具有cx_Freeze、PyInstaller和py2exe,想想我当初接触pyt...【详细内容】
2020-07-24  Tags: python打包  点击:(106)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条