将Python文件打包成.EXE可执行文件的方法


Posted in Python onAugust 11, 2019

利用Python写了一个小脚本想要传给使用Windows但没有装Python的朋友执行,这时候就可以利用将档案包装成exe档案,让没有Python的朋友也可以执行。本篇将介绍利用套件「PyInstaller」制作exe档。

1|0安装方法

#安装pyinstaller
pip install pyinstaller
#安装依赖
pip install pywin32-ctypes

2|0常用参数介绍

pyinstaller -h来查看参数

-F打包成一个exe文件

-i图标路径

-w使用视窗,无控制台

-c使用控制台,无视窗

-D创建一个目录,包含exe以及其他一些依赖性文件

编译文件时,我们通常使用如下命令:

pyinstaller -F -w -i favo.ico main.py

3|0静态文件

对于python所依赖的图片,config.yaml等静态文件,pyinstall不会自动打包,需要手动在main.py(所需要打包的入口文件)的相同目录中寻找main.spec,修改datas依赖,才可以自动打包到exe的相同目录下,然后执行即可

datas是一个数组,每个子项是一个tuple,其中tuple的第一个参数是你要打包的源路径,第二个参数是打包后的名字

# -*- mode: python -*-

block_cipher = None

a = Analysis(['ui.py'],
pathex=['C:\\Users\\user\\Desktop\\resilio\\toyou\\code\\zeus_board_test'],
binaries=[],
datas=[('C:\\Users\\user\\Desktop\\resilio\\toyou\\code\\zeus_board_test\\images','images'),('C:\\Users\\user\\Desktop\\resilio\\toyou\\code\\zeus_board_test\\question.yaml','question.yaml')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)

然后执行:

pyinstaller -F main.spec

4|0示例

如下图所示,我们编写一个输出helow pyinstaller的Python程序,并利用input()使程序可以暂时停在输出画面。

print('helow pyinstaller')
input('please wait:')

编译python为exe,编译过程中会自动安装相关依赖

pyinstaller -F hello.py

编译过程中会产生如下输出:

…
6942 INFO: checking PY
6944 INFO: Building because toc changed
6944 INFO: Building PYZ(ZlibArchive)C:\Users\user\Desktop\test\build\test\PYZ-00.pyz
7559 INFO: Building PYZ(ZlibArchive)C:\Users\user\Desktop\test\build\test\PYZ-00.pyz completed successfully.
7568 INFO: checking PKG
7569 INFO: Building because toc changed
7569 INFO: Building PKG(CArchive)PKG-00.pkg
9407 INFO: Building PKG(CArchive)PKG-00.pkg completed successfully.
9409 INFO: Bootloader c:\users\user\appdata\local\programs\python\python36\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe9409 INFO: checking EXE
9411 INFO: Building because toc changed
9411 INFO: Building EXE from EXE-00.toc
9412 INFO: Appending archive to EXE C:\Users\user\Desktop\test\dist\test.exe
9455 INFO: Building EXE from EXE-00.toc completed successfully.

通过输出可以看出pyinstaller进行了如下操作:

会先建立一个hello.spec

建立「build」文件夹

建立log纪录档与工作档案于文件夹build中

建立「dist」文件夹

建立执行档(.exe)在「dist」文件夹

4|1注意事项

执行档案可在win8/win10,64位的电脑运行,但win7 x64和其余所有32位失败,会提示不兼容,若要能32位与64位皆可运行,就要在Python 32位的环境下编译PyInstaller打包exe,才能在32位与64位成功。

Python 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
用Python写冒泡排序代码
Apr 12 Python
详解Python下ftp上传文件linux服务器
Jun 21 Python
Python实现字典按key或者value进行排序操作示例【sorted】
May 03 Python
numpy.linspace函数具体使用详解
May 27 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
用python写爬虫简单吗
Jul 28 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
python多线程同步实例教程
Aug 11 #Python
pandas的to_datetime时间转换使用及学习心得
Aug 11 #Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 #Python
Python时间序列缺失值的处理方法(日期缺失填充)
Aug 11 #Python
python3实现带多张图片、附件的邮件发送
Aug 10 #Python
python实现邮件自动发送
Aug 10 #Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 #Python
You might like
浅谈discuz密码加密的方式
2014/05/22 PHP
PHP防止post重复提交数据的简单例子
2014/06/07 PHP
CI框架安全类Security.php源码分析
2014/11/04 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
PHP写的简单数字验证码实例
2017/05/23 PHP
JavaScript 基础篇(一)
2012/03/30 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
jquery 判断滚动条到达了底部和顶端的方法
2014/04/02 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
PyCharm设置护眼背景色的方法
2018/10/29 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
pytorch使用 to 进行类型转换方式
2020/01/08 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
Python文件操作模拟用户登陆代码实例
2020/06/09 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
实习教师自我鉴定
2013/09/27 职场文书
《藏戏》教学反思
2014/02/11 职场文书
个人委托书范本
2014/09/13 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
python四种出行路线规划的实现
2021/06/23 Python
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL