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

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

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

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

完整源代码在文章末尾。

笔记时间


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

import os
os.system("dir")

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

如果分成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:\Users\11\1.py”,得到我们想要的文件名 "1.py",得到我们要的目录 "C:\Users\11\"

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

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

解决方案如下

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

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

完整源码如下

main.py

import Ui_py2exe
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QMessageBox
import os
from pathlib import PureWindowsPathdef 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\谭鸿伟\Documents\pythonworks\10-py2exe\py2exe.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, QtWidgetsclass 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.translateMainWindow.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目录里"))

python懒人小工具:python打包exe 小工具相关推荐

  1. 一款懒人必备的Python爬虫神器

    前言 今天把最近的一个应用做好了,测试了一下运行没有问题,剩下的就是检验一下结果如何.从光谱到Lab值通常使用matlab中的roo2lab(),不过经过我最近的测试发现转换的结果并不理想,而且这个转 ...

  2. 【懒人专用】Python实现Modelsim独立仿真Vivado工程的自动化脚本

    引言 有两种方法可以使用 Modelsim 对 Vivado 工程进行仿真,即级联仿真和独立仿真.        级联仿真就是通过设置使 Vivado 调出 Modelsim 仿真界面并启动仿真,这种 ...

  3. 【Kivy自学笔记】Python开发App必备!Kivy打包exe文件!(补充:设置Kivy应用logo导入kv文件)

    文章目录 Kivy打包exe 修改Kivy应用的logo 导入kv文件 py文件中编写kv代码 返回主目录 Kivy打包exe 官方说明 参考文章 操作步骤 生成spec文件命令:pyi-makesp ...

  4. 懒人长尾词挖掘工具,适合懒人的3个长尾词挖掘工具

    适合"懒人"的.操作简单的.挖掘速度较快的3个长尾词挖掘工具: 1.IIS7长尾词挖掘工具     IIS7长尾关键词挖掘工具提供在线挖掘长尾词.关键词.操作简单,可以看到挖词进度 ...

  5. python打包exe实用工具auto-py-to-exe的操作方法

    auto-py-to-exe操作方法 auto-py-to-exe 是一个用于打包 python 程序的程序. 本文就是主要介绍如何使用 auto-py-to-exe 完成 python 程序打包. ...

  6. python防止程序多开,打包EXE实现

    使用到系统os模块和psutil模块实现 一.psutil模块: 1.psutil是一个跨平台库(http://pythonhosted.org/psutil/)能够轻松实现获取系统运行的进程和系统利 ...

  7. python撩人的代码,[python撩妹小程序]python人的撩妹技巧

    学习一门语言最好的方式就是有项目驱动,或者说你得有目的的去学,这样你才能学的更快.作为一个小白,我的出发点就是利用Python哄女朋友开心啦.今天给大家介绍两个Python人专属的撩妹技巧. 1.用P ...

  8. python一键电影搜索与下载_[懒人福利]用Python进行[天堂电影]下载资源的搜索

    #!/usr/bin/env python #encoding:utf-8 import requests from bs4 import BeautifulSoup import urllib im ...

  9. python绿色版运行程序_Python打包exe运行程序,分享你的技术成果!

    本文转载于公众号:你想要

最新文章

  1. Oracle 跨resetlogs的恢复
  2. 数据查询和业务流分开_数据仓库介绍与实时数仓案例
  3. AngularJs ngReadonly、ngSelected、ngDisabled
  4. fastai学习:02_production Questionnaire
  5. 转 Grand Central Dispatch 基础教程:Part 1/2 -swift
  6. php的命名空间实例
  7. Jeesite框架IDEA导入,部署,启动,打包
  8. 关于LibFetion(小飞信)被禁止登陆的思考
  9. STM32项目 -- 选题分享(2)(部分)
  10. 【汇正财经】金融股有什么投入优势?
  11. java安装安装jdk,配置环境变量
  12. 史上最全Maven教程(二)
  13. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之五布局方法点击响应!
  14. linux中exp命令详解_exp/imp命令的介绍和使用
  15. Hackbar初步了解和火狐中安装
  16. ios打包报错: DXT1 compressed textures are not supported when publishing to iPhone
  17. Postman(七): postman应用实战
  18. android市场发展前景,安卓模拟器市场发展前景怎么样
  19. curl Operation timed out after 20001 milliseconds with 0 out of 0 bytes received
  20. 中国化的P2P金融都有哪些特色?

热门文章

  1. 控制计算机桌面图标,(1)在桌面上显示“计算机”“控制面板”图标,然后隐藏“控制面板”图标。...
  2. 写好简历的16个关键点
  3. HTTP-Runoob:HTPP Content-Type
  4. obs多推流地址_手把手教你-OBS录屏使用
  5. 共轭(conjugate)
  6. 概率论 事件关系 古典概型与几何概型
  7. python 电路仿真spice_SPICE模型电路仿真器的用法及功能解析
  8. 榆熙:拼多多商家提升销量的技巧
  9. WS4665D-8/TR单通道负载开关WILLSEM封装DFN2x2-8L
  10. s60v5用java qq_S60V5手机QQ终于来了,试用感受!