将图形可视化工具的 Python 脚本打包为 Windows 应用程序

news2025/6/6 8:49:54

        前文我们已经写了一个基于python的tkinter库和matplotlib库的图形可视化工具

        基于Python的tkinter库的图形可视化工具(15种图形的完整代码):基于Python的tkinter库的图形可视化工具(15种图形的完整代码)-CSDN博客

        在前文基础上,为了更好管理,以及便于生成exe,现将所有文件都存放桌面的GraphVisualizerApp文件夹中。

一、PyInstaller 打包 Python程序步骤

        要将图形可视化工具打包为 Windows 可安装应用程序并添加桌面图标,我们可以使用 PyInstaller 和 NSIS (Nullsoft Scriptable Install System) 来完成这个任务。以下是详细步骤:

(一)使用 PyInstaller 打包 Python 脚本

首先需要安装 PyInstaller 并生成单个可执行文件:

# 安装 PyInstaller
pip install pyinstaller

# 切换到脚本所在目录
cd /path/to/your/script
# 如,我当前的脚本文件是放在桌面上,则:
cd Desktop/GraphVisualizerApp

# 打包脚本 (替换为你的脚本名,当前脚本名是graphVisualizerApp)
pyinstaller --onefile --windowed --icon=app.ico GraphVisualizerApp.py

参数说明:

  • --onefile:将所有依赖打包成单个可执行文件
  • --windowed:不显示命令行窗口
  • --icon=app.ico:指定应用程序图标(需准备一个 .ico 格式图标文件)

打包需要时间,直到出现以下结果,说明已经打包成功:

        PyInstaller 默认将 exe 生成到 dist 目录,查看dist目录下,是否已经存在了graphvisualizerapp.exe文件,有就说明成功了,没有exe文件,可以重新打包试一下。

(二)准备应用程序图标

1.准备一张高质量的 PNG 图片(建议尺寸 256x256)

2.使用在线工具将 PNG 转换为 ICO 格式,例如:

        可以直接将转换好的ico文件下载。

3.将生成的 app.ico 文件放在脚本同一目录下

同时,也看到前面打包成功后,文件夹中多出了多个文件。

(三)使用 NSIS 创建安装程序

NSIS 是一个免费的工具,用于创建 Windows 安装程序。按照以下步骤操作:

1.下载并安装 NSIS

  • 从 NSIS 官网 下载并安装

2.创建 NSIS 脚本

  • 在脚本目录创建一个名为 installer.nsi 的文件,内容如下:

        可以先创建一个txt文件,将代码放进去之后,再改后缀名

; 图形可视化工具安装程序
Name "图形可视化工具"
OutFile "图形可视化工具安装程序.exe"
InstallDir "$PROGRAMFILES\图形可视化工具"
RequestExecutionLevel admin

; 安装界面设置
!define MUI_ABORTWARNING
!include "MUI2.nsh"

; 页面定义
!define MUI_STARTMENU_APPSPATH "图形可视化工具"  ; 定义开始菜单路径

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

; 语言设置
!insertmacro MUI_LANGUAGE "English"  ; 确保语言文件存在

; 安装文件
Section "MainSection"
    SetOutPath $INSTDIR
    File /r "dist\*"
    
    ; 创建桌面图标
    CreateShortCut "$DESKTOP\图形可视化工具.lnk" "$INSTDIR\GraphVisualizerApp.exe"
    CreateShortCut "$SMPROGRAMS\图形可视化工具\图形可视化工具.lnk" "$INSTDIR\GraphVisualizerApp.exe"
    
    ; 创建卸载快捷方式
    CreateShortCut "$SMPROGRAMS\图形可视化工具\卸载.lnk" "$INSTDIR\uninstall.exe"

    ; 关键步骤:生成卸载程序
    WriteUninstaller "$INSTDIR\uninstall.exe"  ; 指定卸载程序路径
SectionEnd

; 卸载部分
Section "Uninstall"
    Delete "$DESKTOP\图形可视化工具.lnk"
    Delete "$SMPROGRAMS\图形可视化工具\卸载.lnk"
    Delete "$SMPROGRAMS\图形可视化工具\图形可视化工具.lnk"
    RMDir "$SMPROGRAMS\图形可视化工具"
    Delete "$INSTDIR\GraphVisualizerApp.exe"
    RMDir /r "$INSTDIR"
SectionEnd

        由于前面已经安装了NSIS,所以改了后缀名之后,文件会被自动识别。

        这里有个需要注意的地方,NSIS 默认使用 ANSI 编码(Windows 系统的默认编码),而txt包含中文注释且使用了 UTF-8 编码,之后会导致解析失败。所以这时,需要右键install.nsi-->另存为-->修改编码-->覆盖保存

 此时的文件目录结构为:

GraphVisualizerApp/
├── GraphVisualizerApp.py       # 主脚本
├── GraphVisualizerApp.spec
├── app.ico                   # 应用图标
├── installer.nsi             # NSIS 安装脚本
├── dist/                     # PyInstaller 生成的目录
│   └── GraphVisualizerApp.exe  # 打包后的可执行文件
└── build/                    # PyInstaller 临时文件

3.编译 NSIS 脚本

  • 右键点击 installer.nsi 文件,选择 "Compile NSIS Script"
  • 编译完成后,将生成 图形可视化工具安装程序.exe

之后会打开NSIS软件,显示创建安装程序过程。显示如下的绿色背景,说明成功了。

此时,在GraphVisualizerApp文件夹下出现了“图形可视化工具安装程序.exe

(四)测试安装程序

  1. 运行生成的安装程序
  2. 按照安装向导完成安装
  3. 验证:
    • 桌面是否出现应用程序图标
    • 开始菜单是否有应用程序入口
    • 应用程序是否能正常启动并生成图形

以下是安装步骤:

安装成功后,桌面上会出现安装图标

双击打开。

安装目录下,会有卸载程序。

卸载程序。

不过相应的安装文件夹要自己删除!

二、常见问题及解决方案

1.缺少依赖库

  • 如果打包后程序运行报错,可能是缺少某些依赖库
  • 可以尝试使用 --hidden-import 参数指定缺失的模块

2.图标不显示

  • 确保 ICO 文件格式正确且尺寸合适
  • 可以尝试使用不同的图标生成工具

3.安装程序体积过大

  • 可以考虑使用 UPX 压缩可执行文件:
pyinstaller --onefile --windowed --icon=app.ico --upx-dir=path/to/upx GraphVisualizerApp.py

三、其他问题        

        最开始的时候我是用中文的,但是最后发现不行,所以前文使用的语言是英语。以下仅供参考。具体问题以及解决办法如下:

这个错误是由于 NSIS 找不到中文语言文件导致的。以下是详细的解决方案:

(一)错误原因分析

  1. 缺少中文语言文件

    • NSIS 的 Modern UI 2 插件需要对应的语言文件(.nlf)才能显示中文界面。
    • 错误信息明确指出找不到 ChineseSimplified.nlf 文件,该文件通常位于 NSIS\Contrib\Language files 目录下。
  2. NSIS 安装不完整

    • 在安装 NSIS 时,Contrib 组件(包含语言文件和插件)可能未被勾选安装。

(二)解决方案

方法 1:手动下载并添加语言文件
  1. 下载中文语言文件

    • 从 NSIS 官方仓库下载 ChineseSimplified.nlf 文件:
      • 下载地址:ChineseSimplified.nlf
    • 或者从其他 NSIS 安装机器的 NSIS\Contrib\Language files 目录复制该文件。
  2. 放置文件到正确路径

    • 将下载的 ChineseSimplified.nlf 放到以下路径:
      D:\Program Files (x86)\NSIS\Contrib\Language files\
      
    • 如果没有 Language files 目录,请手动创建。
方法 2:重新安装 NSIS 并勾选 Contrib 组件
  1. 卸载现有 NSIS

    • 通过 Windows 控制面板卸载 NSIS。
  2. 重新安装 NSIS

    • 下载最新版 NSIS(建议 v3.09 或更高):NSIS 下载页
    • 安装过程中,在 Custom Setup 步骤:
      • 确保勾选 Contrib 组件(包含插件和语言文件)。
      • 确认安装路径为 D:\Program Files (x86)\NSIS

通过这种方式,你可以创建一个专业的 Windows 安装程序,包含桌面图标和完整的卸载功能。

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

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

相关文章

无人机军用与民用技术对比分析

一、材料区别 军用无人机: 1. 高强度特种材料: 大量使用钛合金、碳纤维复合材料,兼顾轻量化与高强度,提升抗冲击性和隐身性能。 关键部件依赖进口材料。 2. 隐身涂层: 采用雷达吸波材料和低红外特征涂料&#xf…

刷leetcode hot100--矩阵6/1

1.螺旋矩阵【很久】6/1【感觉就是思路的搬运工,没完全理解】 54. 螺旋矩阵 - 力扣(LeetCode) 原来想 但是如果是奇数矩阵,遍历不到中间 解决思路: 用left,right,top,down标记/限定每次遍历的元素,每次从…

Docker轻松搭建Neo4j+APOC环境

Docker轻松搭建Neo4jAPOC环境 一、简介二、Docker部署neo4j三、Docker安装APOC插件四、删除数据库/切换数据库 一、简介 Neo4j 是一款高性能的 原生图数据库,采用 属性图模型 存储数据,支持 Cypher查询语言,适用于复杂关系数据的存储和分析。…

定制开发开源AI智能名片S2B2C商城小程序在无界零售中的应用与行业智能升级示范研究

摘要:本文聚焦无界零售背景下京东从零售产品提供者向零售基础设施提供者的转变,探讨定制开发开源AI智能名片S2B2C商城小程序在这一转变中的应用。通过分析该小程序在商业运营成本降低、效率提升、用户体验优化等方面的作用,以及其与京东AI和冯…

【大模型:知识图谱】--5.neo4j数据库管理(cypher语法2)

目录 1.节点语法 1.1.CREATE--创建节点 1.2.MATCH--查询节点 1.3.RETURN--返回节点 1.4.WHERE--过滤节点 2.关系语法 2.1.创建关系 2.2.查询关系 3.删除语法 3.1.DELETE 删除 3.2.REMOVE 删除 4.功能补充 4.1.SET (添加属性) 4.2.NULL 值 …

贪心算法应用:装箱问题(BFD算法)详解

贪心算法应用&#xff1a;装箱问题(BFD算法)详解 1. 装箱问题与BFD算法概述 1.1 装箱问题定义 装箱问题(Bin Packing Problem)是组合优化中的经典问题&#xff0c;其定义为&#xff1a; 给定n个物品&#xff0c;每个物品有大小wᵢ (0 < wᵢ ≤ C)无限数量的箱子&#xf…

编程技能:格式化打印05,格式控制符

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏&#xff0c;故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 &#xff08;一&#xff09;WIn32 专栏导航 上一篇&#xff1a;编程技能&#xff1a;格式化打印04&#xff0c;sprintf 回到目录…

MPLAB X IDE ​软件安装与卸载

1、下载MPLAB X IDE V6.25 MPLAB X IDE | Microchip Technology 正常选Windows&#xff0c;点击Download&#xff0c;等待自动下载完成&#xff1b; MPLAB X IDE 一台电脑上可以安装多个版本&#xff1b; 2、安装MPLAB X IDE V6.25 右键以管理员运行&#xff1b;next; 勾选 I a…

windows编程实现文件拷贝

项目源码链接&#xff1a; 实现文件拷贝功能&#xff08;限制5GB大小&#xff09; 81c57de 周不才/cpp_linux study - Gitee.com 知识准备&#xff1a; 1.句柄 句柄是一个用于标识和引用系统资源&#xff08;如文件、窗口、进程、线程、位图等&#xff09;的值。它不是资…

[6-01-01].第12节:字节码文件内容 - 属性表集合

JVM学习大纲 二、属性表集合&#xff1a; 2.1.属性计数器&#xff1a; 2.2.属性表&#xff1a; 2.3.字节码文件组成5 -> 属性&#xff1a; 1.属性主要指的是类的属性&#xff0c;比如源码的文件名、内部类的列表等 2.4.字节码文件组成3 -> 字段&#xff1a; 1.字段中…

基于机器学习的水量智能调度研究

摘要&#xff1a;随着城市化进程的加速和水资源供需矛盾的日益突出&#xff0c;传统的水量调度模式因缺乏精准预测和动态调控能力&#xff0c;难以满足现代供水系统对高效性、稳定性和节能性的要求。本文针对供水系统中用水峰谷预测不准确、能耗高、供需失衡等核心问题&#xf…

深入浅出 Scrapy:打造高效、强大的 Python 网络爬虫

在数据为王的时代,高效获取网络信息是开发者必备的技能。今天我将为大家介绍 Python 爬虫领域的王者框架——Scrapy。无论你是数据工程师、分析师还是开发者,掌握 Scrapy 都能让你的数据采集效率提升数倍! 项目地址:https://github.com/scrapy/scrapy 官方文档:https://do…

贪心算法应用:带权任务间隔调度问题详解

贪心算法应用&#xff1a;带权任务间隔调度问题详解 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。带权任务间隔调度问题是贪心算法的一个经典应用场景。 问题定义…

用电脑控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点&#xff1a; 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比&#xff0c;使用 14 位模数转换器 &#xff08;ADC&#xff09; 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS …

LLaMA-Factory - 批量推理(inference)的脚本

scripts/vllm_infer.py 是 LLaMA-Factory 团队用于批量推理&#xff08;inference&#xff09;的脚本&#xff0c;基于 vLLM 引擎&#xff0c;支持高效的并行推理。它可以对一个数据集批量生成模型输出&#xff0c;并保存为 JSONL 文件&#xff0c;适合大规模评测和自动化测试。…

【Elasticsearch】Elasticsearch 核心技术(二):映射

Elasticsearch 核心技术&#xff08;二&#xff09;&#xff1a;映射 1.什么是映射&#xff08;Mapping&#xff09;1.1 元字段&#xff08;Meta-Fields&#xff09;1.2 数据类型 vs 映射类型1.2.1 数据类型1.2.2 映射类型 2.实际运用案例案例 1&#xff1a;电商产品索引映射案…

【计算机网络】网络层协议

1. ICMP协议的介绍及应用 IP协议的助手 —— ICMP 协议 ping 是基于 ICMP 协议工作的&#xff0c;所以要明白 ping 的工作&#xff0c;首先我们先来熟悉 ICMP 协议。 ICMP 全称是 Internet Control Message Protocol&#xff0c;也就是互联网控制报文协议。 里面有个关键词 …

结构型设计模式之Proxy(代理)

结构型设计模式之Proxy&#xff08;代理&#xff09; 前言&#xff1a; 代理模式&#xff0c;aop环绕通知&#xff0c;动态代理&#xff0c;静态代理 都是代理的一种&#xff0c;这次主要是记录设计模式的代理demo案例&#xff0c;详情请看其他笔记。 1&#xff09;意图 为其…

案例分享--汽车制动卡钳DIC测量

制动系统是汽车的主要组成部分&#xff0c;是汽车的主要安全部件之一。随着车辆性能的不断提高&#xff0c;车速不断提升&#xff0c;对车辆的制动系统也随之提出了更高要求&#xff0c;因此了解车辆制动系统中每个部件的动态行为成为了制动系统优化的主要途径&#xff0c;同时…

Redis Set集合命令、内部编码及应用场景(详细)

文章目录 前言普通命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREM 集合间操作SINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令小结内部编码使用场景 前言 集合类型也是保存多个字符串类型的元素的&#xff0c;但和列表类型不同的是&#xff0c;集合中 1&#xff09;元…