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打包的执⾏⽂件,只能在和打包机器系统同样的环境下。也就是说,不具备可移
植性,若需要在不同系统上运⾏,就必须针对该平台进⾏打包。
⼆. PyInstaller的安装
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特有的参数
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和结果都是⼀样的
6. 参数的添加得在pyinstaller和dev.py⽂件中间,不能随意位置添加
7. 如果你打包的代码中⽤到了静态⽂件,如图⽚和资源⽂件,需⼿动复制到⽂件夹中,否则exe⽂件会报不到⽂件的错
8. 代码⾥导包最好使⽤from的⽅式,可节省打包后的⽂件⼤⼩
9. 就是当你使⽤错误的参数去打包或者打包到⼀半中断,等等此类运⾏到⼀半没了的情况。会导致你原来的py⽂件变成⼀个0KB的空⽂件。⾥⾯的代码会全部消失所以以后需要有个良好的习惯,就是复
制⼀份代码出来,⽤这个副本进⾏打包。
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’ **
python默认安装路径错误分析:因为我的代码中引⽤了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'
]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论