Python源文件打包成可执行的exe应用,给你的代码变个身!
Hello!我是努力赚钱买生发水的灰小猿。
今天和大家记录一下Python程序打包成exe应用程序的过程。
我们平常所写的程序一般都是在编译环境下运行的,然而这对于那些没有开发环境或者对程序一无所知的小白就很不友好了,
所以在进行Python项目开发的后期,对于能够最大化的满足各类型用户的需求,十分有必要的一项工程就是软件打包成EXE。
注意:光理论是不够的,在此送大家一套2020最新Python全栈实战视频教程,点击此处 免费获取一起进步哦!
进行Python软件打包的意义就在于让开发的软件能够脱离开发环境,即使对Python编程开发毫无经验的小白,也可以在电脑上使用Python开发产品。
软件打包也是进行大型Python软件开发的后期必备的一步操作,最典型的效果就是可以脱离开发环境,实现软件的可视化。
要将Python脚本文件打包成可以使用的Python软件,可以借助的工具有py2exe、bbFreeze、pyInstaller、cx_Freeze、py2app,但对于目前使用性能最好的工具还是pyinstaller。
下面是这些模块的使用对照表,可以自行参考:
大灰狼也对最常用的pyInstaller、cx_Freeze进行了试验和对比。
发现在打包效果上pyInstaller还是要优于cx_Freeze的,所以今天就以pyinstaller为例记录一下Python软件打包的过程。
首先是pyinstaller模块的安装,通常情况下可以在Python运行环境下的Script中使用cmd命令安装pyinstaller模块。
但应注意pyinstaller模块的依赖库较多,所以在安装时常会出现缺少模块的错误提醒,这个时候就需要使用pip命令将缺少的模块一一导入进入。
在安装好pyinstaller模块之后,就可以对Python文件进行打包了,其中导Python模块的方法可以是将文件放在与pip相同的文件夹下,或者在使用命令时,将文件的绝对路径放在打包命令中。
以下是在使用pyinstaller进行打包时必备的步骤和注意事项,仔细参考,谨防踩坑:
(1) pyinstaller适用于python3.5及以下版本
(2) 在python环境的Script下使用cmd命令进行打包,
(3) 对于不需要调用其他外部库的py文件,
① 单独使用命令pyinstaller 命令 文件.py
(4) 对于需要调用外部库的py文件
① 使用pyi-makespec -F 文件.py生成spec文件
② 对spec文件中的参数进行修改
③ spec文件中主要包含4个class: Analysis, PYZ, EXE和COLLECT.
- Analysis以py文件为输入,它会分析py文件的依赖模块,并生成相应的信息
- PYZ是一个.pyz的压缩包,包含程序运行需要的所有依赖
- EXE根据上面两项生成
- COLLECT生成其他部分的输出文件夹,COLLECT也可以没有
④ Spec文件配置
- py文件打包配置
针对多目录多文件的python项目,打包时候需要将所有相关的py文件输入到Analysis类里。Analysis类中的pathex定义了打包的主目录。
对于在此目录下的py文件可以只写文件名不写路径。如上的spec脚本,将所有项目中的py文件路径以列表形式写入Analysis,这里为了说明混合使用了绝对路径和相对路径。
- 资源文件打包配置
资源文件包括打包的python项目使用的相关文件,如图标文件,文本文件等。对于此类资源文件的打包需要设置Analysis的datas。
如例子所示datas接收元组:datas=[(SETUP_DIR+‘libicon’,‘libicon’(SETUP_DIR+‘data’,‘data’)]。元组的组成为(原项目中资源文件路径,打包后路径)。
例子中的(SETUP_DIR+‘libicon’,‘libicon’)表示从D:install_testFASTPLOTlibicon下的图标文件打包后放入打包结果路径下的libicon目录。
- c)Hidden import配置
pyinstaller在进行打包时,会解析打包的python文件,自动寻找py源文件的依赖模块。
但是pyinstaller解析模块时可能会遗漏某些模块(not visible to the analysis phase),造成打包后执行程序时出现类似No Module named xxx。
这时我们就需要在Analysis下hiddenimports中加入遗漏的模块,如例子中所示。
8)递归深度设置
将spec文件配置好以后在cmd中使用pyinstaller -XXX XXXX.spec
(5)、在打包导入某些模块时,常会出现"RecursionError: maximum recursion depth exceeded"的错误。
这可能是打包时出现了大量的递归超出了python预设的递归深度。因此需要在spec文件上添加递归深度的设置,设置一个足够大的值来保证打包的进行,
(6)pyinstaller库的参数
(7)Exe的图标文件格式为ico格式,可以直接在这个网站进行ico格式图标的转换https://www.easyicon.net/
(8)打包时的路径要使用绝对路径
(9)打包前要将所有需要使用的包导入python的开发环境下。
(10)pyinstaller打包后的路径使用中文没有问题,不过为了减少打包时候出错的可能,尽量将打包使用的资源文件和代码文件路径设置为英文。
最后
在软件打包完成以后会在Python环境的Script目录下打包生成两个文件目录build和dist。
build为临时文件目录完成打包后可以删除;dist中存放打包的结果,可执行文件和其它程序运行的关联文件都在这个目录下。
注意:最后送大家一套2020最新企业Pyhon项目实战视频教程,点击此处 免费获取,希望大家一起进步哦!
关于Python软件打包的必备要领就记录这些,软件打包对于软件在无开发环境的电脑上运行是十分不错的举措,感兴趣的小伙伴可以尝试!
觉得不错记得点赞关注哟!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微服务[学成在线] day03:CMS页面管理开发
- ggplot2|绘制GO富集柱形图
- 使用Prometheus监控Flink
- 微服务[学成在线] day04:页面静态化
- Spring Boot 整合Mybatis代码生成插件
- Spring Boot 配置文件
- Hello Spring Boot
- Spring Boot 整合Druid
- Spring Boot 整合JDBC
- Spring Boot 整合SpringSecurity
- jacoco-maven-plugin:prepare-agent
- 【LeetCode】两数之和
- 【LeetCode】回文数
- RestTemplate 发送 Https 请求调用
- 【LeetCode】整数反转