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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

什么是节点光端机?总线型光端机有哪些优势?

节点式光端机又称总线型光端机,其准确的定义是采用单/双纤链路式组网形式的图像传输系统,也被称为链路式光端机。那么,节点式光端机具体是什么呢?总线型光端机又有哪些优势呢?接下来我们就跟随飞畅科技的小编一起来详细…

mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开...

今日客户要求表内的数据依据某种分组生成HTML页面进行展示,一般处理这种需求直接上编程工具就好了,从数据库里读取数据,根据规则生成字符串,最后将字符串写出到文件。由于需求比较急,作为数据库编程系列文章&#xff0…

什么是数据光端机?数据光端机的作用有哪些?

数据光端机,电信非压缩光端机,就是将多个E1(一种中继线路的数据传输标准,通常速率为2.048Mbps,此标准为中国和欧洲采用)信号变成光信号并传输的设备。那么,什么是数据光端机?数据光端…

spring创建web项目_使用Spring WS创建合同优先的Web服务

spring创建web项目1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例将JAXB2用于(取消)编组。 为了开发服务,我将使用合同优先的方法,该方法首先定义服务合同,然后基于此合同实施…

什么是网络光端机?网络光端机工作原理及功能介绍!

网络光端机,就是光信号传输的终端设备。由于目前技术的提高,光纤价格的降低使它在各个领域得到很好的应用。在远程光纤传输中,光缆对信号的传输影响很小,光纤传输系统的传输质量主要取决于光端机的质量,因为光端机负责…

以太网交换机的用途有哪些?

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。交换机还具备了一些新的功能,如对VLAN(虚拟局域网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。接下来就由飞畅科技的小编带大家详细了解下交…

交换机主要分为哪几类?

交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 从广义上来看&…

java编程彩球滑梯作弊_课内资源 - 基于C++的学生成绩管理系统

1 系统分析1.1 学生成绩管理系统介绍班主任管家软件以学生信息、课程信息为基础,以品行表现成绩(辅导员、班主任、班级评议成绩)和业务课程成绩为评价依据,每学期评定一次奖学金,奖学金作为学生评定各种荣誉的主要依据,并将各种评…

交换机工作原理介绍

交换机是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层,即数据链路层。交换机拥有一条高带宽的背部总线和内部交换矩阵&am…

bitmap的java原理_布隆算法的原理及JAVA实现

Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合&#xff…

什么是语音复用设备?

语音复用设备是一种小容量、多业务的复用及传输设备,它能为用户提供综合的通信功能,满足用户对电话、数据以及计算机网络连接的实际需要。它的多种传输方式使其能灵活的应用在各种通信网络中:可以作为光电一体化综合通信业务接入设备&#xf…

截断整型提升算数转换

文章目录 🚀前言🚀截断🚀整型提升✈️整型提升是怎样的 🚀算术转换 🚀前言 大家好啊!这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…

java如何通过grpc连接etcd_grpc通过 etcd 实现服务发现与注册-源码分析

介绍下面介绍 jupiter-0.2.7 版本中 grpc 通过 etcd 实现服务发现与注册。服务发现与注册的实现解析服务注册服务注册的流程图:etcd的服务注册代码模块在 jupiter/pkg/registry/etcdv3 中。下面让我们来看看实际的代码// Registry register/unregister service// re…

spring jms 事务_Spring JMS:处理事务中的消息

spring jms 事务1.引言 这篇文章将向您展示使用JMS异步接收消息期间使用者执行过程中的错误如何导致消息丢失。 然后,我将解释如何使用本地事务解决此问题。 您还将看到这种解决方案在某些情况下可能导致消息重复(例如,当它将消息保存到数据…

使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

快速提供内容对于任何网站或应用程序具有更好的客户体验至关重要。 如果您将网站或应用程序托管在AWS Cloud中,那么无论从何处访问应用程序,都可以以较低的延迟快速提供内容。 AWS提供了CloudFront服务,用于将内容缓存在每个用户地理位置本地…

数据光端机设备性能指标介绍

作为安防监控工程,设备的可靠性应该是第一考虑要素。而数据光端机设备的可靠性是设备厂商在产品设计时就必需考虑的,但是,有些厂商可能会因为某些原因而不愿做或不知道怎么做这方面的工作,在这里着重从工程的角度简单地讨论以下问…

光电转换器有什么作用?光纤收发器如何保养?

光电转换器可以使原来的快速以太网平滑升级,并能充分保护用户原来的网络资源,它也可以称为光纤收发器。光电转换器可以实现交换机和计算机之间的互联,也可以作为传输中继,还可以进行单多模转换。光纤收发器在应用过程中&#xff0…