一键式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文件。
- 进行分词处理。
- 统计词频,并保存结果。
优化功能:
- 文件预览:在图形用户界面(GUI)中添加了一个部分,用以展示所选Excel文件的前五行数据。
- 字段选择自由度:增加了一个下拉菜单,让用户可以自由选择要进行分词统计的字段。
- 错误处理:在处理数据之前,我添加了一些检查程序来确保用户已正确选择了字段。
- 智能命名:保存文件时,默认文件名将设置为选定字段的名称,简化了操作过程。
通过这些功能的优化,用户可以更加方便快捷地完成他们的任务。
接下来,我将分享打包Python脚本为EXE文件的具体步骤,让您也能轻松制作出自己的工具。
直接用Python打包为什么大?为什么要使用conda环境?
参考:https://blog.csdn.net/libaineu2004/article/details/112612421
在压缩打包之前,先简单说一下为什么Python打包过大?
Python打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。
此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”
所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。
那最适合的就是——虚拟环境了!
现在让我们正式开始吧 !
将Python脚本打包为一个独立的应用程序
要创建一个可以在没有Python环境的电脑上运行的程序,我们需要将Python脚本打包为一个独立的应用程序。步骤如下:
-
编写Python脚本:首先,需要一个完整的Python脚本,它能够读取Excel文件、进行分词和词频统计,并保存结果。
-
图形用户界面(GUI):为了更可以方便地使用这个程序,可以创建一个简单的图形用户界面,其中包括文件上传、字段选择和一个按钮来生成结果。
-
打包为可执行文件:使用诸如PyInstaller或cx_Freeze等工具,将Python脚本和所有必要的库打包为一个可执行文件(.exe)。这样,就不需要安装Python环境。
-
分发应用程序:将生成的.exe文件发送给朋友,她可以在自己的电脑上直接运行它。
1. 编写Python脚本:初步功能实现
2. 初步图形用户界面(GUI)
功能优化
- 选择文件后预览表格的前五行:在GUI中添加一个部分来显示所选Excel文件的前五行数据。
- 自由选择对Excel的哪个字段进行统计:添加一个下拉菜单以选择要统计的特定字段。
- 添加错误处理:在处理数据之前,添加一些检查来确保用户已正确选择列。
- 保存的文件名默认为字段名称:在保存文件对话框中,将默认文件名设置为选定字段的名称。
新建一个库,然后打包脚本
当使用 PyInstaller 将 Python 脚本打包为可执行文件(.exe)时,PyInstaller 会尝试包含脚本运行所需的所有依赖库。这通常意味着它会将目前 Python 环境中与脚本相关的库打包进可执行文件中。然而,这并不意味着 PyInstaller 会打包 Anaconda 环境中的所有库,而只是打包那些脚本实际依赖的库。
在拥有大量库的环境中使用 PyInstaller 可能会导致一些问题,如可执行文件体积过大或打包时间过长。如下所示(我不清楚为啥他会想打包tensorflow):
因此,创建一个新的、只包含必需库的环境,是确保打包过程顺利进行的好方法。以下是创建新环境并在其中运行 PyInstaller 的步骤:
-
创建新的 Conda 环境:
conda create --name newenv python=3.8 # 可以选择合适的Python版本
-
激活新环境:
conda activate newenv
或者是
activate newenv
- 在新环境中安装必需的包:
- 如果和我一样,使用的是 Anaconda,那么 pandas 和 tkinter(作为 Python 的一部分)通常已经预装在 Anaconda 环境中。
- 所以,安装 PyInstaller:
pip install pyinstaller
- 然后,安装脚本依赖的其他库(例如 pandas, jieba 等):
pip install jieba
pip install openpyxl
再次运行代码
在 Visual Studio Code (VSCode) 中切换 Conda 环境,并运行 Python 文件的步骤如下:
-
打印python解释器绝对路径:在cmd中激活刚配置的 Conda 环境,方便后续在vscode中添加。可以使用
which
命令(在 Unix 或类 Unix 系统上,如 Linux 或 macOS)或where
命令(在 Windows 上)来查找 Python 解释器的绝对路径。-
在 Unix 或类 Unix 系统上:
which python
-
在 Windows 系统上:
where python
(第一个就是,复制这个路径)
-
-
选择 Python 解释器:打开想要运行的
.py
文件,VSCode 允许选择用于运行 Python 脚本的解释器。可以通过以下两种方式之一选择解释器:-
命令面板:
- 按
Ctrl+Shift+P
打开命令面板。 - 输入并选择
Python: Select Interpreter
。 - 从列表中选择 Conda 环境。Conda 环境通常标有
conda
字样,并显示在环境名称旁边。
- 按
-
状态栏:
- 在 VSCode 窗口的底部状态栏中,可以看到当前选定的 Python 解释器。点击这个部分可以打开解释器的选择列表。
- 从列表中选择 Conda 环境。
-
-
运行 Python 文件:
- 可以直接点击编辑器上方工具栏中的“运行”按钮(通常是一个绿色三角形图标)来运行当前的 Python 文件。
- 或者,您也可以右键点击编辑器中的代码,然后选择
Run Python File in Terminal
。
确保已在 VSCode 中安装了 Python 扩展(由 Microsoft 提供),这样才能更好地支持 Python 开发,并且可以让更容易地切换 Python 解释器。
如果 Conda 环境没有出现在解释器列表中,可能需要检查一下 VSCode 的设置和 Conda 环境是否已正确配置。在某些情况下,重新启动 VSCode 或手动添加解释器路径也可以解决问题。
脚本打包为.exe文件(记得先关闭windows防火墙,否则会被拦截)
- vscode顶栏点击 【查看】,选择【终端】 ,打开即可;
英文版的是【view】,选择【terminal】
(记得切换conda环境!!我这里就没切换对,所以还是默认的conda,打包的文件贼大。)
(可以尝试下面那种方法,感觉更容易成功)
- 或者直接在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
文件。
朋友如何运行的指南:
-
复制文件:
- 将
test.exe
文件复制到电脑上。建议保存到易于访问的位置,如桌面或特定的工作文件夹。
- 将
-
运行程序:
- 双击
test.exe
文件即可运行程序。如果安全警告弹窗出现(这在第一次运行时很常见),请选择“运行”或类似选项以继续。
- 双击
-
使用应用:
- 根据程序设计,可以直接通过图形用户界面进行交互,例如上传 Excel 文件、选择要分析的列等。
-
保存和查看结果:
- 程序处理完数据后,提供了保存结果的选项。根据程序设计,需要选择保存位置或直接查看结果。
-
关闭程序:
- 完成操作后,可以正常关闭程序。
注意事项:
-
如果朋友的电脑上安装有安全软件或防病毒程序,可能会出现阻止运行的情况。这是因为安全软件有时会错误地将新的或未知的 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 无法正常工作。
要解决这个问题,请按照错误消息中提供的建议操作:
- 打开命令提示符或终端。
- 使用
conda
或pip
移除pathlib
包。根据您的错误消息,您应该使用conda
:conda remove pathlib
- 移除完成后,再次尝试使用 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: 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件” 通常与操作系统的安全设置有关。这个问题可能是由以下几个原因引起的:
-
安全软件或防病毒程序的干预:某些安全软件或防病毒程序可能会错误地将您的 Python 脚本或由 PyInstaller 创建的 EXE 文件识别为恶意软件。这可能导致在尝试创建或执行这些文件时遇到阻碍。
-
Windows Defender 的保护机制:Windows Defender 可能会阻止某些被认为不安全的操作,尤其是当它检测到文件可能包含恶意代码时。
为了解决这个问题,可以尝试以下几个步骤:(最快捷的是第四个~但是单独使用没有用,必须要关闭Windows Defender)
-
检查文件是否确实安全:首先,请确保您的脚本和所依赖的库都是从可信来源获取的,确保它们没有潜在的安全风险。
-
将文件加入排除列表:如果您确定文件是安全的,您可以尝试将其添加到您的防病毒软件或 Windows Defender 的排除列表中。这样,安全软件就不会阻止这些文件的创建和运行。
- 在 Windows Defender 中,您可以通过“设置” > “更新与安全” > “Windows 安全中心” > “病毒与威胁防护” > “病毒与威胁防护设置”管理设置,并添加排除。
-
暂时禁用安全软件:在创建 EXE 文件的过程中,您可以暂时禁用安全软件。请确保在完成操作后重新启用它。
-
以管理员身份运行:尝试以管理员身份运行您的命令提示符或 PyInstaller。右键点击命令提示符图标,选择“以管理员身份运行”。
-
更新 PyInstaller:确保您使用的是 PyInstaller 的最新版本,因为旧版本有时会引发安全软件的误报。
-
咨询专业人士:如果您不确定如何操作,或者担心可能会对系统安全造成风险,建议咨询 IT 专业人士的帮助。
请务必在进行这些操作时谨慎行事,确保不会误关闭必要的安全保护措施。