Python pyinstaller图形化打包工具

Python pyinstaller图形化打包工具

1.简介:

一个使用Python PYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的python打包体验。资源已打包,大家可自行下载。

相关功能:

  1. 识别是否安装了pyinstaller,如果没有的话,打开在左上角会提示,并在右上角增加“安装”按钮。
  2. 打包过程设置为隐式。并且加入“显示处理”选项。
  3. 支持一键拖拽文件以及自动选择文件。
  4. 支持导出到桌面以及设置打包好的软件图标。

pyinstaller 相关参数:

-F    制作独立的可执行程序
-D    制作出的档案存放在同一个文件夹下(默认值)
-K    包含TCL/TK(对于使用了TK的,最好加上这个选项,否则在未安装TK的电脑上无法运行)
-w    制作窗口程序
-c    制作命令行程序(默认)
-X    制作使用UPX压缩过的可执行程序(推荐使用这个选项,需要下载UPX包,解压后upx.exe放在Python(非PyInstaller)安装目录下,下载upx308w.zip)
-o DIR  指定输出SPEC文件路径(这也决定了最后输出的exe文件路径)
–icon=[ICO文件路径] 指定程序图标
-v [指定文件] 指定程序版本信息
-n [指定程序名] 指定程序名称
–distpath=D:/dist 输出到指定位置

2.运行效果:

在这里插入图片描述

3.相关源码:

from PyQt5.QtWidgets import QWidget, QApplication, QPushButton, QTextEdit, QCheckBox, QLabel, QFileDialog
from PyQt5.QtGui import QIcon
import sys
import os
import subprocessclass WinDow(QWidget):def __init__(self):super().__init__()self.setWindowTitle("Pyinstaller图形化打包工具")self.setMinimumSize(500 , 300)self.setMaximumSize(500 , 300)self.setWindowIcon(QIcon("pussy.ico"))self.wenjian_ui()self.ico_ui()self.anniu_ui()self.qingchu_ui()self.zhuomian_ui()self.tishi_ui()self.banben_ui()self.anzhuang_ui()self.anzhuang_anniu()self.xianshi_anniu()self.tishi2_ui()self.minglingchuang_ui()self.tishi3_ui()self.wenjian_anniu()self.ico_anniu()self.sczdwz_ui()self.sczdwz_xx()self.baocun_anniu()self.sczdwz_tishi()def wenjian_ui(self):wenjian = QTextEdit(self)self.wenjian = wenjianwenjian.resize(480-50-20 , 150-50-50)wenjian.move(10,30)wenjian.setPlaceholderText("可拖拽py文件至此:")wenjian.setTabChangesFocus(True)def ico_ui(self):ico = QTextEdit(self)self.ico = icoico.resize(480-50-20 , 50)ico.move(10,190-50-50)ico.setPlaceholderText("可拖拽ico文件至此:")ico.setTabChangesFocus(True)def anniu_ui(self):anniu = QPushButton(self)self.anniu = anniuanniu.setText("打包生成EXE")anniu.move(415 , 340-105)anniu.resize(80,60)self.anniu.clicked.connect(self.anniu_cao)def qingchu_ui(self):qingchu = QPushButton(self)self.qingchu = qingchuqingchu.setText("清空")qingchu.move(415 , 340-105-40)self.qingchu.clicked.connect(self.qingchu_cao)def zhuomian_ui(self):zhuomian  = QCheckBox(self)self.zhuomian = zhuomianzhuomian.setText("输出到桌面")zhuomian.move(20, 345-110-40)# zhuomian.toggled.connect(lambda isChecked :print(isChecked))def guanbibaocun():if self.zhuomian.isChecked() == True:self.sczdwzan.setChecked(False)self.sczdwz.setText("")self.baocunanniu.close()elif self.zhuomian.isChecked() == False and self.baocunanniu.isChecked() ==True:self.baocunanniu.show()zhuomian.clicked.connect(guanbibaocun)def tishi_ui(self):tishi = QLabel(self)self.tishi = tishitishi.setText("支持XP,Win7,Win10等打包到桌面")tishi.setStyleSheet('background-color: rgb(255, 251, 100)')tishi.move(5, 365-113-40)def banben_ui(self):banben = QLabel(self)self.banben = banbenbanben.move(10, 10)cmd = 'pyinstaller -v'pivi = subprocess.call(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)# print(pivi)self.bbpi = piviif self.bbpi == 0:banben.setText("您已安装PyInstaller")else:banben.setText("您目前还没安装PyInstaller")banben.setStyleSheet('color:rgb(255, 10, 10)')def anzhuang_ui(self):anzhuang = QLabel(self)self.anzhuang = anzhuanganzhuang.move(300,10)if self.bbpi == 0:anzhuang.setText("")else:anzhuang.setText("我要安装PyInstaller")def anzhuang_anniu(self):azan = QPushButton(self)self.azan = azanazan.move(415,3)if self.bbpi == 0:azan.close()else:azan.setText("我要安装")azan.clicked.connect(self.anzhuang_cao)def anzhuang_cao(self):a = "pip install pyinstaller"os.system(a)def xianshi_anniu(self):xianshi = QCheckBox(self)self.xianshi = xianshixianshi.setText("使用显式处理")xianshi.move(20, 265-40)def tishi2_ui(self):tishi2 = QLabel(self)self.tishi2 = tishi2tishi2.setText("默认使用隐式,显式处理为弹出打包的命令行界面")tishi2.setStyleSheet('background-color: rgb(255, 251, 100)')tishi2.move(5, 280-40)def minglingchuang_ui(self):minglingchuang = QCheckBox(self)self.minglingchuang = minglingchuangminglingchuang.setText("使用命令窗")minglingchuang.move(20, 255)def tishi3_ui(self):tishi3 = QLabel(self)self.tishi3 = tishi3tishi3.setText("注意:命令行程序请勾选此选项,否则运行时会提示以下报错\n          failed to execute scipt XXX")tishi3.setStyleSheet('background-color: rgb(255, 251, 100)')tishi3.move(5, 280-10)def wenjian_anniu(self):wenjiananniu = QPushButton(self)self.wenjiananniu = wenjiananniuwenjiananniu.setText("选择py文件")wenjiananniu.move(430-10, 30+10)# wenjiananniu.resize(30,30)wenjiananniu.adjustSize()wenjiananniu.clicked.connect(self.dakaiwenjian_cao)def dakaiwenjian_cao(self):# dakaiwenjian = QFileDialog.getOpenFileUrl(self)dakaiwenjian = QFileDialog.getOpenFileName(self, "请选择一个PY文件", "./", "python文件(*.py)", "python文件(*.py)")# print(dakaiwenjian)self.wenjian.setText("file:///"+str(dakaiwenjian[0]))def ico_anniu(self):icoanniu = QPushButton(self)self.icoanniu = icoanniuicoanniu.setText("选择ico文件")icoanniu.move(430 - 10, 30 + 10+50+10)# wenjiananniu.resize(30,30)icoanniu.adjustSize()icoanniu.clicked.connect(self.dakaiico_cao)def dakaiico_cao(self):# dakaiwenjian = QFileDialog.getOpenFileUrl(self)dakaiico = QFileDialog.getOpenFileName(self, "请选择一个ico文件", "./", "ico文件(*.ico)", "ico文件(*.ico)")# print(dakaiico)self.ico.setText("file:///"+str(dakaiico[0]))def sczdwz_ui(self):sczdwz = QTextEdit(self)self.sczdwz = sczdwzsczdwz.setText("")sczdwz.move(10 , 170)sczdwz.resize(480-50-20 , 150-50-50-25)sczdwz.setReadOnly(True)def sczdwz_xx(self):sczdwzan = QCheckBox(self)self.sczdwzan = sczdwzansczdwzan.setText("打包文件输出到指定位置")sczdwzan.move(20, 345-110-60-25-10)def guanbizhuomian():if sczdwzan.isChecked() == True:self.zhuomian.setChecked(False)self.baocunanniu.show()else:self.baocunanniu.close()self.sczdwz.setText("")sczdwzan.clicked.connect(guanbizhuomian)def baocun_anniu(self):baocunanniu = QPushButton(self)self.baocunanniu = baocunanniubaocunanniu.setText("选择保存路径")baocunanniu.move(480-50-10 , 345-110-60-5)# wenjiananniu.resize(30,30)baocunanniu.adjustSize()baocunanniu.clicked.connect(self.baocunlujin_cao)baocunanniu.close()def sczdwz_tishi(self):sczdwzts = QLabel(self)self.sczdwzts = sczdwztssczdwzts.setText("打钩后才会显示选择按钮")sczdwzts.move(5, 345-110-60-20)sczdwzts.setStyleSheet('background-color: rgb(255, 251, 100)')def baocunlujin_cao(self):baocunlujin = QFileDialog.getExistingDirectory(self)# print(baocunlujin)self.sczdwz.setText(baocunlujin)def anniu_cao(self):if self.minglingchuang.isChecked() == True:if self.xianshi.isChecked() == True:if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F "j = self.wenjian.toPlainText()h = " --distpath=%UserProfile%/Desktop/dist"self.k = i + j[8:] + hshuchu = self.k# print(shuchu)os.system(shuchu)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":i = "pyinstaller -F "j = self.wenjian.toPlainText()self.k = i + j[8:]shuchu = self.k# print(shuchu)os.system(shuchu)elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath=%UserProfile%/Desktop/dist"self.k = i + h[8:] + " " + j[8:] + mshuchu = self.kos.system(shuchu)# print(shuchu)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":i = "pyinstaller -F -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()self.k = i + h[8:] + " " + j[8:]shuchu = self.kos.system(shuchu)# print(shuchu)#这是一段elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F "j = self.wenjian.toPlainText()h = " --distpath="s = self.sczdwz.toPlainText()self.k = i + j[8:] + h + sshuchu = self.k# print(shuchu)os.system(shuchu)elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath="s = self.sczdwz.toPlainText()self.k = i + h[8:] + " " + j[8:] + m + sshuchu = self.kos.system(shuchu)# print(shuchu)else:passelse:if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F "j = self.wenjian.toPlainText()h = " --distpath=%UserProfile%/Desktop/dist"self.k = i + j[8:] + hshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":i = "pyinstaller -F "j = self.wenjian.toPlainText()self.k = i + j[8:]shuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath=%UserProfile%/Desktop/dist"self.k = i + h[8:] + " " + j[8:] + mshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":i = "pyinstaller -F -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()self.k = i + h[8:] + " " + j[8:]shuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)#这是第二段elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F "j = self.wenjian.toPlainText()h = " --distpath="s = self.sczdwz.toPlainText()self.k = i + j[8:] + h + sshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath="s = self.sczdwz.toPlainText()self.k = i + h[8:] + " " + j[8:] + m + sshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)else:passelse:if self.xianshi.isChecked() == True:if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F -w "j = self.wenjian.toPlainText()h = " --distpath=%UserProfile%/Desktop/dist"self.k = i + j[8:] + hshuchu = self.k# print(shuchu)os.system(shuchu)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":i = "pyinstaller -F -w "j = self.wenjian.toPlainText()self.k = i + j[8:]shuchu = self.k# print(shuchu)os.system(shuchu)elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -w -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath=%UserProfile%/Desktop/dist"self.k = i + h[8:] + " " + j[8:] + mshuchu = self.kos.system(shuchu)# print(shuchu)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":i = "pyinstaller -F -w -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()self.k = i + h[8:] + " " + j[8:]shuchu = self.kos.system(shuchu)# print(shuchu)elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F -w "j = self.wenjian.toPlainText()h = " --distpath="s = self.sczdwz.toPlainText()self.k = i + j[8:] + h + sshuchu = self.k# print(shuchu)os.system(shuchu)elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -w -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath="s = self.sczdwz.toPlainText()self.k = i + h[8:] + " " + j[8:] + m + sshuchu = self.kos.system(shuchu)# print(shuchu)else:passelse:if self.zhuomian.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F -w "j = self.wenjian.toPlainText()h = " --distpath=%UserProfile%/Desktop/dist"self.k = i + j[8:] + hshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() == "":i = "pyinstaller -F -w "j = self.wenjian.toPlainText()self.k = i + j[8:]shuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.zhuomian.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -w -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath=%UserProfile%/Desktop/dist"self.k = i + h[8:] + " " + j[8:] + mshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.zhuomian.isChecked() == False and self.sczdwzan.isChecked() == False and self.ico.toPlainText() != "":i = "pyinstaller -F -w -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()self.k = i + h[8:] + " " + j[8:]shuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() == "":i = "pyinstaller -F -w "j = self.wenjian.toPlainText()h = " --distpath="s = self.sczdwz.toPlainText()self.k = i + j[8:] + h + sshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)elif self.sczdwzan.isChecked() == True and self.ico.toPlainText() != "":i = "pyinstaller -F -w -i "j = self.wenjian.toPlainText()h = self.ico.toPlainText()m = " --distpath="s = self.sczdwz.toPlainText()self.k = i + h[8:] + " " + j[8:] + m + sshuchu = self.k# print(shuchu)subprocess.call(shuchu, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE,stderr=subprocess.PIPE)else:passdef qingchu_cao(self):self.wenjian.clear()self.ico.clear()self.sczdwz.clear()if __name__ == "__main__":app = QApplication(sys.argv)window = WinDow()window.show()sys.exit(app.exec())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

canal安装使用

简介 canal [kənl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议…

专业140+总分400+北京理工大学826信号处理导论考研经验北理工电子信息与通信工程,真题,大纲,参考书。

考研总分400,专业826信号处理导论(信号与系统和dsp)140,成功上岸北理工,虽然已经一段时间,但是后劲很大,每每回想还是昨日事,群里同学多次要求分享自己的一些经验,感谢大…

pdb调试器详解

文章目录 1. 启动 pdb 调试器1.1 在代码中插入断点1.2 使用命令行直接调试脚本 2. 常用调试命令2.1 基本命令2.2 高级命令2.3 断点操作 3. 调试过程示例4. 调试技巧4.1 条件断点4.2 自动启用调试4.2.1 运行程序时指定 -m pdb4.2.2在代码中启用 pdb.post_mortem4.2.3 使用 sys.e…

基于Spring Boot的同城宠物照看系统的设计与实现

一、摘要 在快节奏的现代生活中,宠物已成为许多家庭不可或缺的一部分。然而,宠物照看服务的需求也随之增长。为了满足这一需求,我们设计并实现了一款同城宠物照看系统,该系统利用Java技术和MySQL数据库,为用户提供一个…

【Qt】QWidget中的常见属性及其作用(一)

目录 一、 enabled 例子: 二、geometry 例子: window fram 例子 : 四、windowTiltle 五、windowIcon 例子: qrc机制 创建qrc文件 例子: qt中的很多内置类都是继承自QWidget的,因此熟悉QWidget的…

全栈开发:后台管理系统时代的技术破局之道

在当前的互联网发展阶段,许多二三线城市的互联网项目正在经历一个显著的转变。传统的To C项目逐渐减少,取而代之的是大量的企业级后台管理系统。在这样的背景下,全栈开发——特别是前端加Java的组合,正在成为一个备受关注的发展方…

【ubuntu24.04】PDFMathTranslate 本地PDF翻译GPU部署

https://huggingface.co/spaces/reycn/PDFMathTranslate-Docker排不上号官方都是要安装包,感觉可以本地试着源码部署一下, http://localhost:7860/官方是这个端口,但是我本地启动是:5000IDEA 里本地 backend启动效果 GUI 是监听7860的

挺详细的记录electron【V 33.2.0】打包vue3项目为可执行程序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、直接看效果 二、具体步骤 1.安装配置electron 1.将 electron 包安装到应用的开发依赖中。 2.安装electron-packager依赖(打包可执行文件&#…

西瓜甜不甜

西瓜甜不甜?有人就会说了,这还不简单,拿把刀,把西瓜劈开,吃两口,你不就知道了。但这有几个问题,值得探讨,我们来看下面这副图: 如果西瓜是在货摊上,是卖主的西…

【sgFileLink】自定义组件:基于el-link、el-icon标签构建文件超链接组件,支持垃圾桶删除、点击预览视频/音频/图片/PDF格式文件

sgFileLink源代码 <template><div :class"$options.name"><el-link click.stop"clickFile(data)"><img :src"getSrc(data)" /><span>{{ getFileNameAndSize(data) }}</span></el-link><el-linkcl…

电容的哪些事儿

电容的串并连 电容并联&#xff0c;两电容电压相同&#xff0c;C并C1C2 耐压取较小的&#xff0c;然后再做降额处理 电容串联&#xff0c;两电容电量相同&#xff0c;1/C串1/C11/C2。根据两电容电量相同&#xff0c;Qmin{C1U1,C2U2}&#xff0c;耐压值Umin{C1U1/C2,U2}min{C2…

在 Kibana 中为 Vega Sankey 可视化添加过滤功能

作者&#xff1a;来自 Elastic Tim Bosman 及 Miloš Mandić 有兴趣在 Kibana 中为 Vega 可视化添加交互式过滤器吗&#xff1f;了解如何利用 “kibanaAddFilter” 函数轻松创建动态且响应迅速的 Sankey 可视化。 在这篇博客中&#xff0c;我们将了解如何启用 Vega Sankey 可视…

supervision - 好用的计算机视觉 AI 工具库

Supervision库是一款出色的Python计算机视觉低代码工具&#xff0c;其设计初衷在于为用户提供一个便捷且高效的接口&#xff0c;用以处理数据集以及直观地展示检测结果。简化了对象检测、分类、标注、跟踪等计算机视觉的开发流程。开发者仅需加载数据集和模型&#xff0c;就能轻…

Windows如何安装go环境,离线安装beego

一、安装go 1、下载go All releases - The Go Programming Language 通过网盘分享的文件&#xff1a;分享的文件 链接: https://pan.baidu.com/s/1MCbo3k3otSoVdmIR4mpPiQ 提取码: hxgf 下载amd64.zip文件&#xff0c;然后解压到指定的路径 2、配置环境变量 需要新建两个环境…

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中&#xff0c;集合类&#xff08;Collections&#xff09;是构建高效程序的核心组件之一&#xff0c;而 List 接口作为集合框架中的重要一员&#xff0c;是一个有序、可重复的元素集合。与 Set 接口不同&#xff0c;List 保证了元素的顺序性&#xff0c;并允许存…

Linux shell的七大功能---输入输出重定向 << >> < >

1、输出定向符 >&#xff08;覆盖&#xff09; 命令>文件 以覆盖的形式&#xff0c;将命令正确的输出结果写入进文件 例&#xff1a;“who命令”将当前的Linux服务器系统使用者等信息显示出来 &#xff08;使用“ Ctrl Alt F mun ”切换到命令行界面&#xff0…

实战 | 某院校小程序记录

视频教程在我主页简介里 目录&#xff1a; 前言&#xff1a; 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#xff0c;奇葩弱口令离…

debian12学习笔记

前置条件 基于debian12官网的qcow2格式文件进行操作 安装ssh 登录虚拟机后安装ssh服务端 apt install openssh-server配置国内源 新增/etc/apt/sources.list.d/tsinghua.list 使用清华大学的源 https://www.cnblogs.com/shanhubei/p/18104430 deb https://mirrors.tuna.t…

ansible自动化运维(三)jinja2模板roles角色管理

相关文章ansible自动化运维&#xff08;一&#xff09;简介及清单,模块-CSDN博客ansible自动化运维&#xff08;二&#xff09;playbook模式详解-CSDN博客ansible自动化运维&#xff08;四&#xff09;运维实战-CSDN博客 三.Ansible jinja2模板 Jinja2是Python的全功能模板引…

数据结构 (35)分配类排序

前言 分配类排序是数据结构中的一种重要排序方法&#xff0c;其核心思想是利用分配和收集过程对元素进行排序&#xff0c;而无需比较元素之间的关键字。这种方法突破了基于关键字比较的排序算法的时间下界&#xff0c;可以达到线性时间复杂度O(n)。 一、分配类排序的基本概念 分…