一键式Excel分词统计工具:如何轻松打包Python脚本为EXE

一键式Excel分词统计工具:如何轻松打包Python脚本为EXE

  • 写在最前面
  • 需求分析
    • 直接用Python打包为什么大?为什么要使用conda环境?
  • 将Python脚本打包为一个独立的应用程序
    • 1. 编写Python脚本:初步功能实现
    • 2. 初步图形用户界面(GUI)
    • 功能优化
    • 新建一个库,然后打包脚本
      • 再次运行代码
    • 脚本打包为.exe文件(记得先关闭windows防火墙,否则会被拦截)
      • Pyinstaller参数大全
    • 测试:运行.exe文件
    • 发送.exe文件
    • 需要发送的文件:
      • 朋友如何运行的指南:
      • 注意事项:
  • 其他:一些报错及解决
    • 报错1: The 'pathlib' package is an obsolete backport of a standard library package and is incompatible with PyInstaller. Please remove this package (located in D:\program\anaconda3\Lib\site-packages) using
    • 报错2:File "C:\Users\Yu\.conda\envs\newenv\lib\site-packages\win32ctypes\core\ctypes\_util.py", line 39, in check_null

写在最前面

最近,表姐遇到了一个挑战:需要从Excel文件中统计出经过分词处理的重复字段,但由于数据隐私问题,这些Excel文件不能外传。这种情况下,直接使用Excel内置功能好像是行不通的,需要借助Python脚本来实现。

为了解决这个问题,我写了一个简单的数据分析和自动化办公脚本,以方便使用。想象一下,即使电脑上没有安装Python,也能通过一个简单的EXE文件轻松完成工作,这是多么方便!

因此,我决定不仅要写出这个脚本,还要学会如何将其打包成一个独立的EXE文件。这样,无需Python环境的电脑也能直接运行它。

(ps:高估自己了,各种配置环境加一起,加上解决各种报错,完成时间:3h
参考这篇文档,预计完成时间:20min左右,因为新建conda环境、打包都需要时间

需求分析

让我们先来看看这个工具的基本和高级功能:

基础功能

  • 读取Excel文件。
  • 进行分词处理。
  • 统计词频,并保存结果。

优化功能

  1. 文件预览:在图形用户界面(GUI)中添加了一个部分,用以展示所选Excel文件的前五行数据。
  2. 字段选择自由度:增加了一个下拉菜单,让用户可以自由选择要进行分词统计的字段。
  3. 错误处理:在处理数据之前,我添加了一些检查程序来确保用户已正确选择了字段。
  4. 智能命名:保存文件时,默认文件名将设置为选定字段的名称,简化了操作过程。

通过这些功能的优化,用户可以更加方便快捷地完成他们的任务。

接下来,我将分享打包Python脚本为EXE文件的具体步骤,让您也能轻松制作出自己的工具。

直接用Python打包为什么大?为什么要使用conda环境?

参考:https://blog.csdn.net/libaineu2004/article/details/112612421

在压缩打包之前,先简单说一下为什么Python打包过大?

Python打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。

此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”

所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。

那最适合的就是——虚拟环境了!

现在让我们正式开始吧 !

将Python脚本打包为一个独立的应用程序

要创建一个可以在没有Python环境的电脑上运行的程序,我们需要将Python脚本打包为一个独立的应用程序。步骤如下:

  1. 编写Python脚本:首先,需要一个完整的Python脚本,它能够读取Excel文件、进行分词和词频统计,并保存结果。

  2. 图形用户界面(GUI):为了更可以方便地使用这个程序,可以创建一个简单的图形用户界面,其中包括文件上传、字段选择和一个按钮来生成结果。

  3. 打包为可执行文件:使用诸如PyInstaller或cx_Freeze等工具,将Python脚本和所有必要的库打包为一个可执行文件(.exe)。这样,就不需要安装Python环境。

  4. 分发应用程序:将生成的.exe文件发送给朋友,她可以在自己的电脑上直接运行它。

1. 编写Python脚本:初步功能实现

在这里插入图片描述

2. 初步图形用户界面(GUI)

在这里插入图片描述

功能优化

  1. 选择文件后预览表格的前五行:在GUI中添加一个部分来显示所选Excel文件的前五行数据。
  2. 自由选择对Excel的哪个字段进行统计:添加一个下拉菜单以选择要统计的特定字段。
  3. 添加错误处理:在处理数据之前,添加一些检查来确保用户已正确选择列。
  4. 保存的文件名默认为字段名称:在保存文件对话框中,将默认文件名设置为选定字段的名称。

在这里插入图片描述

新建一个库,然后打包脚本

当使用 PyInstaller 将 Python 脚本打包为可执行文件(.exe)时,PyInstaller 会尝试包含脚本运行所需的所有依赖库。这通常意味着它会将目前 Python 环境中与脚本相关的库打包进可执行文件中。然而,这并不意味着 PyInstaller 会打包 Anaconda 环境中的所有库,而只是打包那些脚本实际依赖的库。

在拥有大量库的环境中使用 PyInstaller 可能会导致一些问题,如可执行文件体积过大或打包时间过长。如下所示(我不清楚为啥他会想打包tensorflow):

在这里插入图片描述

因此,创建一个新的、只包含必需库的环境,是确保打包过程顺利进行的好方法。以下是创建新环境并在其中运行 PyInstaller 的步骤:

  1. 创建新的 Conda 环境

    conda create --name newenv python=3.8  # 可以选择合适的Python版本
    
  2. 激活新环境

    conda activate newenv
    

或者是

activate newenv
  1. 在新环境中安装必需的包
    • 如果和我一样,使用的是 Anaconda,那么 pandas 和 tkinter(作为 Python 的一部分)通常已经预装在 Anaconda 环境中。
    • 所以,安装 PyInstaller:
      pip install pyinstaller
      
      在这里插入图片描述
    • 然后,安装脚本依赖的其他库(例如 pandas, jieba 等):
      pip install jieba
      
      pip install openpyxl
      

再次运行代码

在 Visual Studio Code (VSCode) 中切换 Conda 环境,并运行 Python 文件的步骤如下:

  1. 打印python解释器绝对路径:在cmd中激活刚配置的 Conda 环境,方便后续在vscode中添加。可以使用 which 命令(在 Unix 或类 Unix 系统上,如 Linux 或 macOS)或 where 命令(在 Windows 上)来查找 Python 解释器的绝对路径。

    • 在 Unix 或类 Unix 系统上:

      which python
      
    • 在 Windows 系统上:

      where python
      

    (第一个就是,复制这个路径)
    在这里插入图片描述

  2. 选择 Python 解释器:打开想要运行的 .py 文件,VSCode 允许选择用于运行 Python 脚本的解释器。可以通过以下两种方式之一选择解释器:

    • 命令面板

      • Ctrl+Shift+P 打开命令面板。
      • 输入并选择 Python: Select Interpreter
      • 从列表中选择 Conda 环境。Conda 环境通常标有 conda 字样,并显示在环境名称旁边。
    • 状态栏

      • 在 VSCode 窗口的底部状态栏中,可以看到当前选定的 Python 解释器。点击这个部分可以打开解释器的选择列表。
      • 从列表中选择 Conda 环境。
        在这里插入图片描述
  3. 运行 Python 文件

    • 可以直接点击编辑器上方工具栏中的“运行”按钮(通常是一个绿色三角形图标)来运行当前的 Python 文件。
    • 或者,您也可以右键点击编辑器中的代码,然后选择 Run Python File in Terminal

确保已在 VSCode 中安装了 Python 扩展(由 Microsoft 提供),这样才能更好地支持 Python 开发,并且可以让更容易地切换 Python 解释器。

如果 Conda 环境没有出现在解释器列表中,可能需要检查一下 VSCode 的设置和 Conda 环境是否已正确配置。在某些情况下,重新启动 VSCode 或手动添加解释器路径也可以解决问题。

脚本打包为.exe文件(记得先关闭windows防火墙,否则会被拦截)

在这里插入图片描述

  1. vscode顶栏点击 【查看】,选择【终端】 ,打开即可;
    英文版的是【view】,选择【terminal】
    (记得切换conda环境!!我这里就没切换对,所以还是默认的conda,打包的文件贼大。)
    (可以尝试下面那种方法,感觉更容易成功)
    在这里插入图片描述
  2. 或者直接在cmd命令行中运行,记得改成绝对路径。并且记得将./test/test.py替换为自己的脚本路径的文件名
pyinstaller --onefile -w d://Users//Yu//Desktop//CSDN//test//test.py

在这里插入图片描述

代码运行时间较长,不要慌是正常的。

终于成功了呜呜呜

在这里插入图片描述

Pyinstaller参数大全

通过这种方法,PyInstaller 会在新环境中查找脚本的依赖,并只打包这些依赖,从而避免不必要的库被包含进可执行文件中。

注意:-w是指程序启动的时候不会打开命令行。如果不加-w的参数,就会有黑洞洞的控制台窗口出来。比如在刚才的脚本里我加一行print(‘Hello World!’),那么就不要放-w参数了,不然运行会报错,毕竟Hello World!需要在命令行里打印出来。此外,-w参数在GUI界面时非常有用。

一些其他参数如下:

在这里插入图片描述

测试:运行.exe文件

根据 PyInstaller 日志,可执行文件(EXE)已成功创建。

日志显示:“Copying bootloader EXE to C:\Windows\System32\dist\test.exe”,这意味着 EXE 文件名为 test.exe,位于 C:\Windows\System32\dist\ 目录下。

不过,通常,我们不建议在系统目录(如 System32)中创建或存储自己的文件,因为这可能导致权限问题或潜在的系统安全风险。可以将项目保存在非系统目录(如用户目录或其他工作目录中)并在那里运行 PyInstaller。

发送.exe文件

这将在dist目录下创建一个可执行文件,可以将这个文件发送给朋友。

在这里插入图片描述
将通过 PyInstaller 创建的单文件(--onefile)可执行程序(EXE)发送给朋友时,通常只需要发送该 EXE 文件本身。单文件模式意味着所有必要的依赖都被打包进了一个可执行文件中,因此不需要额外的文件。

需要发送的文件:

  • test.exe 文件:在 C:\Windows\System32\dist\ 目录下找到的 test.exe 文件。

朋友如何运行的指南:

  1. 复制文件

    • test.exe 文件复制到电脑上。建议保存到易于访问的位置,如桌面或特定的工作文件夹。
  2. 运行程序

    • 双击 test.exe 文件即可运行程序。如果安全警告弹窗出现(这在第一次运行时很常见),请选择“运行”或类似选项以继续。
  3. 使用应用

    • 根据程序设计,可以直接通过图形用户界面进行交互,例如上传 Excel 文件、选择要分析的列等。
  4. 保存和查看结果

    • 程序处理完数据后,提供了保存结果的选项。根据程序设计,需要选择保存位置或直接查看结果。
  5. 关闭程序

    • 完成操作后,可以正常关闭程序。

注意事项:

  • 如果朋友的电脑上安装有安全软件或防病毒程序,可能会出现阻止运行的情况。这是因为安全软件有时会错误地将新的或未知的 EXE 文件标记为潜在威胁。如果出现这种情况,请确保他们了解该文件是安全的,并可能需要将其添加到防病毒软件的白名单中。

  • 确保朋友了解该程序的来源是可信赖的。不建议从未经验证的来源运行 EXE 文件,因为这可能会带来安全风险。

通过这种方式,朋友即使在没有 Python 环境的情况下也可以轻松运行这个程序。

完美!nice!!!

其他:一些报错及解决

报错1: The ‘pathlib’ package is an obsolete backport of a standard library package and is incompatible with PyInstaller. Please remove this package (located in D:\program\anaconda3\Lib\site-packages) using

conda remove

then try again.


遇到这个错误表明在尝试使用 PyInstaller 打包脚本时存在一个问题:pathlib 包与 PyInstaller 不兼容。pathlib 是 Python 3.4 及更高版本的标准库的一部分,但在更早的 Python 版本中它是一个第三方包。由于系统中安装了旧版的 pathlib 包,PyInstaller 无法正常工作。

要解决这个问题,请按照错误消息中提供的建议操作:

  1. 打开命令提示符或终端。
  2. 使用 condapip 移除 pathlib 包。根据您的错误消息,您应该使用 conda
    conda remove pathlib
    
  3. 移除完成后,再次尝试使用 PyInstaller 打包脚本:
    pyinstaller --onefile ./test/test.py
    

如果未使用 conda 管理您的 Python 环境,而是使用 pip,则可以尝试使用以下命令:

pip uninstall pathlib

请确保在适用于 Python 环境的命令行界面中执行这些命令。

例如,如果安装路径不在C盘,那么需要命令提示符的管理员权限,才可以成功运行这个命令。

在这里插入图片描述

报错2:File “C:\Users\Yu.conda\envs\newenv\lib\site-packages\win32ctypes\core\ctypes_util.py”, line 39, in check_null

raise make_error(function, function_name)

OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。


遇到的错误消息 “WinError 225: 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件” 通常与操作系统的安全设置有关。这个问题可能是由以下几个原因引起的:

  1. 安全软件或防病毒程序的干预:某些安全软件或防病毒程序可能会错误地将您的 Python 脚本或由 PyInstaller 创建的 EXE 文件识别为恶意软件。这可能导致在尝试创建或执行这些文件时遇到阻碍。

  2. Windows Defender 的保护机制:Windows Defender 可能会阻止某些被认为不安全的操作,尤其是当它检测到文件可能包含恶意代码时。

为了解决这个问题,可以尝试以下几个步骤:(最快捷的是第四个~但是单独使用没有用,必须要关闭Windows Defender)
在这里插入图片描述

  1. 检查文件是否确实安全:首先,请确保您的脚本和所依赖的库都是从可信来源获取的,确保它们没有潜在的安全风险。

  2. 将文件加入排除列表:如果您确定文件是安全的,您可以尝试将其添加到您的防病毒软件或 Windows Defender 的排除列表中。这样,安全软件就不会阻止这些文件的创建和运行。

    • 在 Windows Defender 中,您可以通过“设置” > “更新与安全” > “Windows 安全中心” > “病毒与威胁防护” > “病毒与威胁防护设置”管理设置,并添加排除。
  3. 暂时禁用安全软件:在创建 EXE 文件的过程中,您可以暂时禁用安全软件。请确保在完成操作后重新启用它。

  4. 以管理员身份运行:尝试以管理员身份运行您的命令提示符或 PyInstaller。右键点击命令提示符图标,选择“以管理员身份运行”。

  5. 更新 PyInstaller:确保您使用的是 PyInstaller 的最新版本,因为旧版本有时会引发安全软件的误报。

  6. 咨询专业人士:如果您不确定如何操作,或者担心可能会对系统安全造成风险,建议咨询 IT 专业人士的帮助。

请务必在进行这些操作时谨慎行事,确保不会误关闭必要的安全保护措施。

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

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

相关文章

Spark基础学习--基础介绍

1. Spark基本介绍 1.1 定义 Spark是可以处理大规模数据的统一分布式计算引擎。 1.2 Spark与MapReduce的对比 在之前我们学习过MapReduce,同样作为大数据分布式计算引擎,究竟这两者有什么区别呢? 首先我们回顾一下MapReduce的架构&#xf…

CC工具箱使用指南:【三调名称转用地用海名称】

一、简介 三调地类和用地用海地类之间有点相似但并不一致。 在做规划时,拿到的三调,都需要将三调地类转换为用地用海地类,然后才能做后续的工作。 一般情况下,三调转用地用海存在【一对一,多对一和一对多】3种情况。…

JWT渗透姿势一篇通

文章前言 企业内部产品应用使用JWT作为用户的身份认证方式,在对应用评估时发现了新的关于JWT的会话安全带来的安全问题,后期再整理时又加入了之前遗留的部分JWT安全问题,至此汇总成一篇完整的JWT文章 简单介绍 JWT(JSON Web Token)是一种用…

直播间的秒杀狂热背后,猫眼电影如何接住10w+并发运营活动?

“倒数,5、4、3、2、1” “10万张!” “20秒没了” 上周末,张家辉和导演马浴柯带着新电影《怒潮》上了疯狂小杨哥的直播间,人数一度冲破80万人。 这次直播,是猫眼电影为新电影《怒潮》准备的一次宣传活动。 随着小…

洛谷P1161 开灯

这倒也是水题&#xff0c;我们可以建立一个数组&#xff0c;数组的下标就是编号&#xff0c;我们要注意的是浮点数乘法的结果要转化成整数&#xff0c;才能当做下标&#xff0c;因为题目给的是整数编号。 # include <stdio.h> int main() {int a[1000000] { 0 }, n, t,…

【linux】linux系统安装与更新软件

前言 linux系统安装软件有许多的方式&#xff0c;本文列举的是类似于windows从应用商店安装软件的方法。也是最常用最省事的方法。 但是呢linux系统是有许多发行版本的&#xff0c;不同版本的命令不同&#xff0c;但语法基本是一模一样。 概念插入 windows系统中&#xff0c…

IPv6自动隧道---6to4隧道

IPv6 over IPv4自动隧道特点 由于IPv4兼容IPv6隧道要求每一个主机都要有一个合法的IP地址,而且通讯的主机要支持双栈、支持IPv4兼容IPv6隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替。 6to4隧道 集手动隧道和自动隧道的优点于一身,提出6to4的目的是为IPv4网络…

Linux如何创建文件

使用touch命令&#xff1a;使用touch命令可以创建一个新文件&#xff0c;如果文件已经存在&#xff0c;则只更新其访问时间和修改时间。例如&#xff0c;要创建一个名为test.txt的文件&#xff0c;请在终端中输入以下命令&#xff1a; touch test.txt使用echo命令&#xff1a;使…

【Spring源码分析】从源码角度去熟悉依赖注入(一)

从源码角度去熟悉依赖注入 一、全局出发引出各种依赖注入策略二、Autowired依赖注入源码分析属性注入源码分析&#xff08;AutowiredFieldElement.inject&#xff09;方法注入源码分析&#xff08;AutowiredMethodElement.inject&#xff09;流程图 其实在上篇阐述非懒加载单例…

UE5 独立程序的网络TCP/UDP服务器与客户端基础流程

引擎源码版&#xff0c;复制\Engine\Source\Programs\路径下的BlankProgram空项目示例。 重命名BlankProgram&#xff0c;例如CustomTcpProgram&#xff0c;并修改项目名称。 修改.Build.cs内容 修改Target.cs内容 修改Private文件夹内.h.cpp文件名并修改.cpp内容 刷新引擎 …

模拟StopWatch改写的一款耗时调试工具

StopWatch在单个文件的单个方法中确时还蛮好用的&#xff0c;但跨多个文件&#xff0c;多个方法的同一线程内调试就有明显的不舒服。一是要建立ThreadLocal共享StopWatch的实例。二是StopWatch的start和stop必须形成闭合。在方法嵌套的场景。比如要查看大方法执行时间&#xff…

性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章&#xff0c;就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法&#xff0c;选用合适的测试工具和被测系统&#xff0c;实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

ChatGPT 如何解决 “Something went wrong. lf this issue persists ….” 错误

Something went wrong. If this issue persists please contact us through our help center at help.openai.com. ChatGPT经常用着用着就出现 “Something went wrong” 错误&#xff0c;不管是普通账号还是Plus账号&#xff0c;不管是切换到哪个节点&#xff0c;没聊两次就报…

Unity3D代码混淆方案详解

背景 Unity引擎使用Mono运行时&#xff0c;而C#语言易受反编译影响&#xff0c;存在代码泄露风险。本文通过《QQ乐团》项目实践&#xff0c;提出一种适用于Unity引擎的代码混淆方案&#xff0c;以保护代码逻辑。 引言 在Unity引擎下&#xff0c;为了防止代码被轻易反编译&a…

Vue created()和 activated()区别和作用调用顺序

目录 作用 区别 举个例子 调用顺序 作用 简单说都是用于页面初始化&#xff0c;土话说一进来页面&#xff0c;去进行数据加载或调用方法的 区别 首先activated 钩子只适用于被 <keep-alive> 包裹的组件。对于不被 <keep-alive> 包裹的组件&#xff0c;activate…

CSS实现的 Loading 效果

方式一、纯CSS实现 代码&#xff1a;根据需要复制 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS Animation Library for Developers and Ninjas</title><style>/* ---------------…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题三 模块一

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

ILI2130触控IC驱动

概述 ili2130触控网上有关的介绍很少&#xff0c;官网也没有有用的东西&#xff0c;所以记录一其驱动&#xff08;MCU驱动&#xff09;。此外ILI2520, ILI2521, ILI2322, ILI2323, ILI2316, ILI2326, ILI2130, ILI2131, ILI2132这几款触控IC使用的是同一个用户指导手册&#x…

吃瓜教程Task1:概览西瓜书+南瓜书第1、2章

由于本人之前已经学习过西瓜书&#xff0c;本次学习主要是对以往知识的查漏补缺&#xff0c;因此本博客记录了在学习西瓜书中容易混淆的点以及学习过程中的难点。更多学习内容可以参考下面的链接&#xff1a; 南瓜书的地址&#xff1a;https://github.com/datawhalechina/pumpk…

zabbix实验

目录 一、zabbix 自动发现与自动注册 1、zabbix 自动发现 ①关闭防火墙和安全机制 ②在服务端和客户端上配置 hosts 解析 ③在 Web 页面配置自动发现 2、zabbix 自动注册 ①环境准备 ②在服务端和客户端上配置 hosts 解析 ③修改 zabbix-agent2 配置文件 ④在 Web 页…