python打包exe原理_pyinstaller打包python文件成exe(原理.安装.问题)

py文件打包成exe文件的方式一共有三种:py2exe、PyInstaller和cx_Freeze

本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件1.PyInstaller 简介2.PyInstaller 安装3.将py文件打包成exe文件4.PyInstaller打包常见问题

一. PyInstaller简介

1.python相关文件介绍python作为一门解释型脚本语言,它有三种发布方式: .py文件 : 源码文件,运行需要使用者安装Python环境并且安装依赖的各种库 .pyc文件:pyc文件是Python解释器可以识别的二进制码,可跨平台的,需要使用者安装相应版本的Python和依赖库。

可执行文件:不需要安装python环境和依赖库,可针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,...)

2.PyInstaller的原理简介1.PyInstaller工具可以把python解析器和脚本打包成一个可执行的文件,并不是编译成真正的机器码,打包成一个可执行文件后运行效率可能会降低,好处就是在使用者的机器上可以不用安装python和你的脚本依赖的库。2.利用PyInstaller对指定的的脚本打包时,会先分析脚本所依赖的其他脚本,然后根据导包路径去查找,把所有相关的脚本收集起来,包括Python解析器,然后根据你的命令参数可分别生成文件夹,或者打包成一个可执行文件。3.无论是生成的文件夹里的可执行文件或者只打包成一个可执行文件都可以直接运行,前者需要把整个文件夹都给别人。

注意⚠️:PyInstaller打包的执行文件,只能在和打包机python基础教程器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

二. PyInstaller的安装

这里建议安装python环境管理工具conda,做到不同的环境隔离

1. PyInstaller在windows下的安装使用命令pip install PyInstaller即可

在windows下,pyinstaller需要PyWin32的支持。当用pip安装PyInstaller时未找到PyWin32,会自动安装pypiwin32

2. PyInstaller在mac,linux下的安装pip install PyInstaller

三. PyInstaller打包

1. options参数说明

通用参数

195389374_1_20200711010051114.png

与生成结果有关参数

195389374_2_20200711010051333.png

Windows和Mac特有的参数

195389374_3_20200711010051552.png

2. 基本语法:PyInstaller -F -w -i xxx.ico dev.py --hidden-import=pandas._libs.tslibs.timedeltas

常用参数:

-F 指只生成一个exe文件,不生成其他dll文件

-w 不弹出交互窗口,如果你想程序运行的时候,与程序进行交互,则不加该参数

-i 设定程序图标 ,其后面的xxx.ico文件就是程序小图标

dev.py 要打包的程序,如果你不是在dev.py同一级目录下执行的打包命令,这里得写上dev.py的路径地址

–hidden-import=pandas._libs.tslibs.timedeltas 隐藏相关模块的引用

注意⚠️:你在哪个目录下执行的命令,默认打包完成的文件或者文件夹就在该目录

四. PyInstaller打包常见问题

⚠️避坑点(打包之前请先看看):1.路径最好为英文,没有中文字符;2.脚本名称里没有特殊字符3.使用utf-8编码4.图标文件必须是正常格式,为.ico文件5.命令使用pyinstaller和pyinstaller.exe结果都是一样的6.参数的添加得在pyinstaller和dev.py文件中间,不能随意位置添加7.如果你打包的代码中用到了静态文件,如图片和资源文件,需手动复制到文件夹中,否则exe文件会报找不到文件的错8.代码里导包最好使用from的方式,可节省打包后的文件大小9.就是当你使用错误的参数去打包或者打包到一半中断,等等此类运行到一半没了的情况。会导致你原来的py文件变成一个0KB的空文件。里面的代码会全部消失!!!所以以后需要有个良好的习惯,就是复制一份代码出来,用这个副本进行打包。并且参数出错,或者打错了导致失败时,检查下副本文件的py文件是否还存在再继续重新打包,不然打出来的就是空的文件,自然一直闪退,因为压根没内容(这点我没遇到过,来自别人的提醒)10.pygame代码调试的时候要在结束时加quit()不然程序会崩溃11.py文件运行没问题,不代表你打包后的文件运行就没问题,所以在打包好文件,打算运行exe文件测试时一定要录屏,因为报错会一闪而逝然后程序关闭,不仔细看的话,发现不了还报错,只会认为程序一运行就闪退,会让人不明所以,都不知道为什么,只有清楚报的什么错才好去解决,所以,一定要录屏!!!!12.如果在py文件中用到了多进程,且你在Windows下编译需要加一行代码在开头,multiprocessing.freeze_support()

13.打包的时候要进入到能运行这个py文件的虚拟环境中,不能在别的环境中对py文件打包,不然打包的结果还是你原来的环境,可能打包文件过大,或者引起缺失包等其他问题14.如果有打包错误,具体看build里的warn***.txt文档,里面详细记载了错误的原因。一般都是库丢失

⚠️Bug:

1. “IndexError: tuple index out of range”错误分析:这个问题是当前的pyinstaller版本不支持python的版本

解决办法:修改pyinstaller的版本,pip install pyinstaller==适合你的版本

**2. ImportError: C extension: No module named‘pandas._libs.tslibs.timedeltas’ **错误分析:因为我的代码中引用了pandas库,然后使用pyinstaller打包的时候显示模块缺失

解决办法:1. 忽略此模块(打包时加上–hidden-import=pandas._libs.tslibs.timedeltas)2. 添加文件

在你的python3的安装路径下找到PyInstaller/hooks的位置

如C:\Python36\Lib\site-packages\PyInstaller\hooks

新建文件hook-pandas.py,并填写以下内容:

hiddenimports=[ #all your previous hidden imports

'pandas', 'pandas._libs.tslibs.timedeltas'

]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 中国地质大学 管理学原理 复习题

《管理学原理》模拟题 一单项选择题 1.管理学既是科学又是(). A.政治 B.实践 C.艺术 D.历史 2.()控制的目的包括防止错误地分配资源. A.规则控制 B.人员控制 C.财务控制 D.结构控制 3.()是组织为达到目标而制定的一种限定活动范围的计划. A.程序 B.方法 C.规划 D.政策 4.()在…

光纤收发器相比其他数据交换器有哪些优势?

在光纤收发器出现以前,网络传输主要是通过光口交换机,但是随着网络通信技术的迅猛发展,人们对网络的使用越来越广泛,网络在地域的覆盖上也越来越大,所以网络的传输速度、传输质量、以及网络传输过程中的保密性等等&…

[渝粤教育] 中国地质大学 自动控制原理 复习题 (2)

《自动控制原理》模拟题 一.单选题 1.当输入为单位斜坡且系统为单位反馈时对于II型系统其稳态误差为() A.0 B.0.1/k C.1/k D.无穷大 2.I型系统开环对数幅频特性的低频段斜率为() A.-40(dB/dec) B.-20(dB/dec) C.0(dB/dec) D.20(dB/dec) 3.当输入为单位斜坡且系统为单位反馈时…

从StreamCorruptedException解析值:无效的流头消息

看到StreamCorruptedException抛出“原因”并指出“ 无效流头 ”,然后提供该无效流头的第一部分是相对常见的情况。 通常,确定异常原因的有用线索是了解无效流头是什么,因为这可以解释意外的原因并引起问题。 StreamCorruptedException只有两…

java 所有子类_java 查找类的所有子类

package _02;import java.io.File;import java.net.URL;public class MainTest_FindAllSubClass {public static void main(String[] args) {Class> clazz MainTest_FindAllSubClass.class;// 定位到当前的包路径// URL url Toy.class.getResource("");// 定位到…

[渝粤教育] 中国地质大学 计算机图形学(新) 复习题

《计算机图形学》模拟题 一单选题 1.枚举出图形中所有点的表示方法是() A.图形 B.图像 C.参数法 D.点阵法 2.下面哪个设备不是计算机图形学的输入设备 A.光笔 B.键盘 C.扫描仪 D.显示器 3.下面哪个设备不是计算机图形学的输出设备 A.激光打印机 B.显示器 C.数据手套 D.喷墨打…

光纤收发器有什么用?光纤收发器的作用是什么?

光纤收发器是光通信系统所必须的一款产品设备,它的主要作用是将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元。那么,光纤收发器有什么用?光纤收发器的作用是什么呢?接下来我们就跟随飞畅科技的小编来一…

[渝粤教育] 中国地质大学 面向对象程序设计 复习题 (2)

《面向对象程序设计》模拟题 一.单选题 1.如果一个类中包含纯虚函数则该类称为(). A.抽象类 B.虚基类 C.派生类 D.子类 2.在类中将show声明为不带返回值的纯虚函数则正确的写法是(). A.virtual void show()0; B.virtual show()0; C.virtual void show(); D.void show()0 virtu…

java如何调用static类_Java中的static的使用指南

一、Java中的static使用之静态变量1.Java 中被static修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享、且优先于对象存在。静态成员可以使用类名直接访问,也可以使用对象名进行访问。使用 stat…

如何利用光衰减器测试光纤收发器的灵敏度?

光纤收发器的灵敏度可以说是光纤收发器的一个重要指标,了解如何测试光纤接收器的灵敏度是一项很重要的技能。当光输入功率在一定范围内时,光纤接收器的性能最佳。但是如何来判断光纤收发器是否会在最低光输入功率时,提供最佳性能呢&#xff1…

[渝粤教育] 西南科技大学 数控机床与编程 在线考试复习资料

数控机床与编程——在线考试复习资料 一、单选题 1.非模态代码指令是指( )。 A.一经在一个程序段中指定,直到出现同组的另一个代码时才失效 B.只在写有该代码的程序段中有效 C.不能独立使用的代码 D.有续效作用的代码 2.S1000表示( )。 A.主轴转速 1000mm/min B.主轴转速1000r…

java与lisp_javalisp

当下,包管理工具十分流行,如今不光是开发用的包,就连软件包都有管理器了。下面隆重推荐 Chocolatey ,官网跟其他包管理器一样,都推崇使用命令行下面说一下安装方法管理员身份运行 cmdpowershell -NoProfile -Execution…

mapreduce 算法_MapReduce算法–了解数据联接第二部分

mapreduce 算法自从我上一次发布以来已经有一段时间了,就像我上一次大休息一样,我正在Coursera上一些课程。 这次是Scala中的函数式编程 原理和React式编程原理 。 我发现它们都是不错的课程,如果有时间的话,建议您选一门。 在这篇…

[渝粤教育] 西南科技大学 电子信息工程专业导论 在线考试复习资料

电子信息工程专业导论——在线考试复习资料 一、单选题 1.下面是关于计算机中定点数和浮点数的一些叙述,正确的是( ) A.浮点数是既有整数部分又有小数部分的数,定点数只能表示纯小数 B.浮点数的尾数越长,所表示的数的精度就越高 C.定点数可表示的数值范围总是大于浮点数所表示的…

交换机的硬件故障问题总结

交换机故障一般可以分为硬件故障和软件故障两大类。硬件故障主要指交换机电源、背板、模块和端口等部件的故障,具体可以分为以下几类。接下来就由飞畅科技来为大家详细介绍下交换机的硬件故障问题,感兴趣的朋友就一起来看看吧! 一、电源故障…

[渝粤教育] 西南科技大学 线性代数 在线考试复习资料

线性代数——在线考试复习资料 一、单选题 1. A. B. C. D. 2.矩阵的特征值为( )。 A. B. C. D. A. B. C. D. A. B. C. D. A.3 B.4 C.1 D.2 A. B. C. D. A.3个方程,5个未知数 B.5个方程,3个未知数 C.5个方程,5个未知数 D.3个方程,3个未知数 A. B. C. D. A. B. C. D. A. B. C. D…

[渝粤教育] 西南科技大学 英语口语 在线考试复习资料

英语口语——在线考试复习资料 一、简答题 1.口语作文(至少200词) Popular Music. 2.口语复杂问答(每题至少50词) What do you do in your spare time? 3.口语复杂问答(每题至少50词) What characteristics do you think a good teacher should have? 4.口语复杂问答(每…

Spring Data Redis:Sentinel的高可用性

1.概述 为了使Redis具有高可用性,我们可以使用Spring Data Redis对Redis Sentinel的支持。 借助Sentinel,我们可以创建自动抵御某些故障的Redis部署。 Redis Sentinel还提供其他附带任务,例如监视,通知,并充当客户端的…

关于交换机和路由器的区别介绍

交换机(又名交换式集线器),是一种用于电(光)信号转发的网络设备,它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机的作用可以理解为将一些机器连接起来组成一个局域网。而路由器与交换机…

[渝粤教育] 西南科技大学 财务会计 在线考试复习资料(2)

财务会计——在线考试复习资料 一、单选题 1.下列各项中,不属于筹资活动产生的现金流量的是( )。 A.吸收权益性投资所收到的现金 B.收回债券投资所收到的现金 C.分配现金股利 D.借入资金所收到的现金 2.下列关于财务报表的说法,错误的是( )…