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

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

本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件python

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打包的执行文件,只能在和打包机器系统一样的环境下。也就是说,不具有可移植性,若须要在不一样系统上运行,就必须针对该平台进行打包。linux

二. PyInstaller的安装

这里建议安装python环境管理工具conda,作到不一样的环境隔离 https://www.cnblogs.com/trotl/p/11863544.htmlwindows

1. PyInstaller在windows下的安装

使用命令pip install PyInstaller便可
在windows下,pyinstaller须要PyWin32的支持。当用pip安装PyInstaller时未找到PyWin32,会自动安装pypiwin32

2. PyInstaller在mac,linux下的安装

pip install PyInstaller

三. PyInstaller打包

1. options参数说明

通用参数 工具

与生成结果有关参数 测试

Windows和Mac特有的参数 ui

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 隐藏相关模块的引用编码

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

四. 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'
                        ]
相关文章
相关标签/搜索