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

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

写在最前面

最近,表姐遇到了一个挑战:需要从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 环境

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

    bash 复制代码
    conda activate newenv

或者是

bash 复制代码
activate newenv
  1. 在新环境中安装必需的包
    • 如果和我一样,使用的是 Anaconda,那么 pandas 和 tkinter(作为 Python 的一部分)通常已经预装在 Anaconda 环境中。

    • 所以,安装 PyInstaller:

      bash 复制代码
      pip install pyinstaller
    • 然后,安装脚本依赖的其他库(例如 pandas, jieba 等):

      bash 复制代码
      pip install jieba
      bash 复制代码
      pip install openpyxl

再次运行代码

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

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

    • 在 Unix 或类 Unix 系统上:

      bash 复制代码
      which python
    • 在 Windows 系统上:

      cmd 复制代码
      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替换为自己的脚本路径的文件名
bash 复制代码
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 专业人士的帮助。

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

相关推荐
并不会2 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
龙鸣丿2 小时前
Linux基础学习笔记
linux·笔记·学习
一点媛艺3 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风3 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生4 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
Nu11PointerException4 小时前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
_.Switch4 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada