如何将Python脚本打包成exe应用程序介绍
作者:南贝塔 发布时间:2021-12-26 20:42:07
前言
我们有时候会编写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应用程序的图标就是我们自定义的图标了。
来源:https://blog.csdn.net/snsb_csdn/article/details/122804590
猜你喜欢
- 最近在做一个领券功能的时候,发现在一定并发下会出现重复领券的问题。使用度娘一顿搜索操作之后,发现可以使用分布式锁来解决这个问题。什么是分布式
- 下面我讲讲关于这套系统的加载流程 定义根目录,定义include目录 加载核心文件 配置文件'config.inc.php'
- 这篇文章主要介绍了微信小程序 云开发模糊查询实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- js监听浏览器回车事件,可以支持ie6+,火狐,谷歌等浏览器。<html><head><script type
- ASP获取远程文件的通过header头信息,并返回远程文件大小信息,远程文件可以是网页或RAR,EXE任何格式的文件。以下是具体代码:<
- 这几天刚刚做了这个东西,有网友问到,所以分享一下。ie6、firefox2 通过,麻烦有ie7的网友测试一下,由于有其他代码,剖析出来麻烦,
- 上次 li 把 dl 模拟了~dl不知道要干什么了:green:~找了ol一起来做复合列表~:这个练习除了css外~外加用了点JS :shi
- 在使用pip安装Tensorflow后,在其目录中没有找到model目录,重复安装了两遍依然没有,原因未知。于是,使用源码安装的方法:(1)
- 第一次见到《Web标准和SEO应用实践》是在我们UCD书友会《设计沟通十器》新书发布现场,机械工业出版社的朋友还带了很多相关新书过来,当时本
- 本文实例讲述了smarty简单分页的实现方法,分享给大家供大家参考。具体实现方法如下:以下是模板中的smarty代码,用smarty简单的代
- 如下所示:import picklewith open(filename, 'rb') as f: datadict = p
- Django中每一个模型model都对应于数据库中的一张表,每个模型中的字段都对应于数据库表的列。方便的是,django可以自动生成这些cr
- 1.问:在DW中如何设置页面边距为0?答:在DW中似乎没有直接设置的方法,你只有在Html文档中插入以
- 我们现在使用的验证手段都是以验证码为主,让用户根据图片输入验证字符,这种方法的安全度尚可,但会给用户带来一些不便和困扰,比如这个雅虎的验证码
- 一、XML产生的背景 XML同HTML一样,都来自Standard Generalized Markup Language, 即标准通用标记
- close方法可以释放一个连接的资源,但是不是立即释放,如果想立即释放,那么在close之前使用shutdown方法shut_rd() --
- 在 Web 编辑器领域,CKEditor – 七年的专注,赢取的是王者风范。TinyMCE – 五年前的小家碧玉,如今已成长为大家闺秀。Go
- 工欲善其事,必先利其器.python是解释型的语言,但是在windows下如果要执行程序的话还得加个python shell的话,
- 最近遇到一个问题,就是获取表单中的日期往后台通过json方式传的时候,遇到Date.parse(str)函数在ff下报错: NAN 找了些资
- 在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。本文重点给大家介绍python中正则表达式 re.findall