将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 相关文章推荐
Python文件去除注释的方法
May 25 Python
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
Python中列表元素转为数字的方法分析
Jun 14 Python
PyQt5每天必学之进度条效果
Apr 19 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
使用Python发现隐藏的wifi
Mar 04 Python
如何理解Python中的变量
Jun 01 Python
python GUI计算器的实现
Oct 09 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
Python用户自定义异常的实现
Dec 25 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
php mssql 数据库分页SQL语句
2008/12/16 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
PHP7新功能总结
2019/04/14 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
jQuery弹出(alert)select选择的值
2013/04/21 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
在Ubuntu系统上安装Ghost博客平台的教程
2015/06/17 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
老生常谈js数据类型
2017/08/03 Javascript
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
简单介绍react redux的中间件的使用
2018/04/06 Javascript
基于vue实现可搜索下拉框定制组件
2020/03/26 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Python 如何实现访问者模式
2020/07/28 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
浅析rem和em和px vh vw和% 移动端长度单位
2016/04/28 HTML / CSS
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
C#实现启动一个进程
2016/10/01 面试题
秋季运动会稿件
2014/01/30 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书