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

news2025/2/23 22:31:58

一键式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.coloradmin.cn/o/1393938.html

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

相关文章

基于Python flask的猫眼电影票房数据分析可视化系统,可以定制可视化

技术方案 猫眼电影票房数据分析可视化系统是基于Python Flask框架开发的一款用于分析和展示猫眼电影票房数据的Web应用程序。该系统利用Flask提供了一个简单而强大的后端框架,结合Request库进行网络爬虫获取猫眼电影票房数据,并使用Pyecharts进行可视化…

【AI的未来 - AI Agent系列】【MetaGPT】4.1 细说我在ActionNode实战中踩的那些坑

文章目录 1. MetaGPT 0.5.2 版本的坑1.1 坑一:cannot import name "ActionNode" from "metagpt.actions.action"1.2 坑二:simple_fill 没有参数 schema1.3 坑三:ActionNode一直在循环执行, 2. 升级成 MetaGP…

高精度算法笔记·····························

目录 加法 减法 乘法 除法 高精度加法的步骤&#xff1a; 1.高精度数字利用字符串读入 2.把字符串翻转存入两个整型数组A、B 3.从低位到高位&#xff0c;逐位求和&#xff0c;进位&#xff0c;存余 4.把数组C从高位到低位依次输出 1.2为准备 vector<int> A, B, …

模拟实现简单的shell

目录 1.实现交互界面 2.子串分割的问题&#xff0c;解决命令行 3.指令的判断 1.实现交互界面 我们模仿打印出来就好了&#xff1a; 现在已经有初步的形状了。 2.子串分割的问题&#xff0c;解决命令行 3.指令的判断 看上面有一行内建命令中的export&#xff0c;其实不对的&a…

C++初入(四)

1.万能头文件 #include <bits/stdc.h> 里面包含了大量我们日常所需的头文件&#xff0c;如果使用它&#xff0c;我们就可以减少大量时间去写头文件&#xff0c;但是其实在平常练习和实际运用中&#xff0c;该头文件几乎没有实际价值&#xff0c;原因&#xff1a;1.里面…

真实体验|微信新推出的工作流表现如何?

以小程序公众号消息推送为例&#xff0c;全面真实体验微信工作流新能力。详解到底能不能用&#xff1f;谁适合用&#xff1f; 上周微信云开发上线了「工作流」能力。支持通过拖拉拽的方式搭建流程&#xff0c;支持调用、时间、消息通知、支付等多种驱动场景的业务计算&#xf…

开源图床LightPicture搭建本地图片管理系统并实现无公网IP远程访问

文章目录 1.前言2. Lightpicture网站搭建2.1. Lightpicture下载和安装2.2. Lightpicture网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 现在的手机越来越先进&#xff0c;功能也越来越多&#xff0c;而手机…

工具 | WSL | WSL动不动就卡死

工具 | WSL | WSL动不动就卡死 PS C: Users flyer> ws1 由于连接方在一段时间后没有正确答复或连接的主机没有反应&#xff0c;连接尝试失败 Error code: Ws1/Service/0x8007274c wsl动不动就卡住 Error code: Wsl/Service/0x8007274c

文心一言 VS 讯飞星火 VS chatgpt (181)-- 算法导论13.4 4题

四、用go语言&#xff0c;在 RB-DELETE-FIXUP 代码的哪些行中&#xff0c;可能会检查或修改哨兵 T.nil &#xff1f; 文心一言&#xff1a; RB-DELETE-FIXUP 是红黑树中的一个操作&#xff0c;用于在删除一个节点后进行必要的调整以保持红黑树的性质。在这个过程中&#xff0…

Alinx ZYNQ 7020 LED调试--in RAM

设置拨码开关为JTAG方式 烧写LED bit stream a. 点击“Program device”烧录程序到FPGA中&#xff08;重新上电程序就丢失了&#xff09; b. /01_led/led.runs/impl_1/led.bit 程序烧录到Flash中 ZYNQ与以往的直接烧录Flash不同&#xff0c;首先必须PS&#xff0c;然后烧…

新定义51单片机(RD8G37)实现测距测速仪

本文描述用新定义51单片机&#xff08;RD8G37&#xff09;超声波一体测距传感器实现简单的测距测速仪。 测距仪演示效果 新定义RD8G37Q48RJ开发板 超声波测距模块&#xff1a; 8位并口屏 1、main.c unsigned short timeConsuming0; unsigned int oldDistance;void rectClearS…

Linux基础命令(超详细)

1、Linux命令入门 命令: 告诉我们要做什么事 选项: 规定做事的方式参数: 规定对谁做这件事 ls命令 # ls 展示目录中的文件信息 ls # -a 展示所有文件内容,包括隐藏文件(以点开头的文件内容) # -l 以列表形式详细展示文件内容 # -h 以合适的单位展示文件大小, 配合-l进行使用 #…

Google推广之关键字匹配类型

做过线上推广的小伙伴们应该都知道&#xff0c;关键字有肯定和否定形式&#xff0c;今天我们主要跟大家分享肯定式关键字的四种匹配类型。不同匹配面向的客户群体不尽相同&#xff0c;比如&#xff0c;我们可以使用“广泛匹配”类型&#xff0c;向广泛的受众群体展示广告&#…

电梯节能落座-智慧停车场️,电梯不仅可载人也可以载汽车!

电梯不仅可载人也可以载汽车哦&#xff01; 在北京市丰台区&#xff0c;有这么一个智慧停车场&#x1f17f;️ &#xff0c;共298个停车位&#xff0c;全部智能一体化&#xff0c;简直是“豪华” “智能” 的象征。 523能源&#xff1a;小伍&#xff0c;你跑题了... 小伍&am…

2023年的年度总结PPT不一样了?

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 到了年终&#xff0c;需要撰写年度总结和制定计划了吗&#xff1f; 找不到合适的 PPT 模板&#xff1f; 感到缺乏灵感&#xff1f; 为做 PPT 绞尽脑汁&#xff1f; 为何不试试 AI 写 PPT 呢&#xff1f…

Docker篇之修改docker默认磁盘占用目录

一、前言 通常情况下&#xff0c;当我们默认安装docker服务时&#xff0c;在不指定默认存储路径时&#xff0c;docker会自动创建目录&#xff0c;经常会出现打满根目录的情况。 默认存储路径为&#xff1a;/var/lib/docker 下 可通过如下进行查询&#xff1a; docker info输出…

Pandas.DataFrame.drop() 删除行或列 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 Pandas稳定版更新及变动内容整合专题&#xff1a; Pandas稳定版更新及变动迭持续更新。 Pandas API参…

web3.0基本概念简析

web3.0概念简析 web3.0的发展史 web1.0 仅用于展示&#xff0c;无法进行点赞评论等交互 web2.0 不仅可以展示&#xff0c;还可以上传视频、图片等&#xff0c;用户可以参与创作内容并获取收益。但还是中心化的模型 缺点 1 机械化的人机验证 2 账户安全无法保证 多年未登陆…

Mechanics 1-Mechanics Toolkit(课件-编辑中)

1.1 Quantities&#xff0c;Units&Modelling 1.1.1 Scalars(标量) & Vectors(矢量) Scalars: 跑步速度5m/s 实际应用中为什么要引入Vector&#xff1f; 这个数据如果在导弹拦截中够用吗&#xff1f; 除了速率(Speed)&#xff0c;还需要发射方向(direction) 因此用Spe…

[C++] opencv - Mat::convertTo函数介绍和使用场景

Mat::convertTo()函数 Converts an array to another data type with optional scaling. 该函数主要用于数据类型的相互转换。 The method converts source pixel values to the target data type. saturate_cast<> is applied at the end to avoid possible overf…