如何将Python脚本打包成exe应用程序介绍
作者:南贝塔
前言
我们有时候会编写Python脚本来辅助我们执行一些重复的操作。但是这些脚本在实际使用中会有一些不方便:
我们通常需要进入终端或者IDE中来运行脚本(当然,有办法可以实现双击脚本文件直接运行,但这不在今天的讨论范围内)。
如果把脚本迁移至其他电脑上,那么Python环境变化,比如新电脑上没有安装Python,或者缺乏该脚本所调用的包等,脚本有很大概率无法正常运行。
这时候,我们可以将脚本打包成一个可以独立运行的应用程序,点开即用,解决上述问题。第三方包Pyinstaller可以实现将Python脚本打包成.exe格式的应用程序,现在以一个例子来介绍使用方法。
首先介绍一下开发的环境。
按照开发习惯,我们的Python脚本在虚拟环境中开发。
项目的路径:D:\myProject\
虚拟环境路径:D:\myProject\virtualEnvironment\
脚本存放路径:D:\myProject\code\
首先在VS code中运行脚本看看效果。这个脚本可以生成一个科研软件所需的csv格式数据,具有一个简单的GUI界面,方便用户设置生成内容。
我们要做的就是将.py格式、需要依赖开发环境的脚本文件打包成一个可以独立运行的.exe格式应用程序。
安装Pyinstaller
脚本在虚拟环境中开发,因此我们也在这个虚拟环境中安装Pyinstaller。保险起见,在终端中强制采用虚拟环境中的pip来安装:
D:\myProject\virtualEnvironment\Scripts\python -m pip install pyinstaller
安装完成之后,在虚拟环境中“Scripts”目录下可以看到一些新增的应用程序,其中pyinstaller.exe就是用于打包脚本的。
将脚本打包成exe应用程序
使用Pyinstaller将Python脚本打包成exe应用程序,最基础的命令是:
pyinstaller codeName.py
为了提高打包成功率,让打包过程更加清晰可控,我推荐以下步骤。
首先打开一个终端,cd至保存exe应用程序的目录。例如,我们在项目目录中新建一个“exe”文件夹,并cd至此:
cd D:\myProject\exe\
然后命令pyinstaller对脚本进行打包:
D:\myProject\virtualEnvironment\Scripts\pyinstaller -F D:\myProject\code\myScript.py
在上述指令中,
D:\myProject\virtualEnvironment\Scripts\pyinstaller是pyinstaller的完整路径。
D:\myProject\code\myScript.py是被打包的Python脚本的完整路径。
D:\myProject\exe\是存放生成的exe应用程序的目录。
打包过程是清晰明确的。
打包完成后,我们查看D:\myProject\exe\目录,可以看到一些新建的文件夹,进入D:\myProject\exe\dist目录,可以看到生成的myScript.exe应用程序。
双击应用程序,脚本成功启动。
这样,脚本所需的环境已经被打包至.exe程序中,脚本的运行将不再需要依赖外部的Python开发环境了。将myScript.exe拷贝至另一台电脑,即使电脑未安装Python,脚本也可以顺利启动。
Python脚本有时候需要调用外部文件,这会涉及到“根目录”和“相对路径”的问题。经过实测,当我们把脚本打包成exe应用程序时,exe应用程序所在的目录即为“根目录”。
进阶:消除命令窗口、自定义图标
以上操作所打包生成的exe应用程序在启动时会打开一个黑色的命令窗口,不美观,我们可以在执行打包命令时添加 -w 来消除这个命令窗口:
D:\myProject\virtualEnvironment\Scripts\pyinstaller -F -w D:\myProject\code\myScript.py
这样生成的exe应用程序在启动时就不会有这个黑色的命令窗口了。
另外,生成的exe应用程序的图标亦可自定义,支持.ico格式的图标文件。在执行打包命令时添加-i来指定图标文件即可:
D:\myProject\virtualEnvironment\Scripts\pyinstaller -F -w -i D:\myProject\myIcon.ico D:\myProject\code\myScript.py
这样生成的exe应用程序的图标就是我们自定义的图标了。
总结
到此这篇关于如何将Python脚本打包成exe应用程序介绍的文章就介绍到这了,更多相关Python打包成exe内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!