将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中的super()方法
Nov 20 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
python监控文件并且发送告警邮件
Jun 21 Python
Python面向对象进阶学习
May 21 Python
python与字符编码问题
May 24 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
python如何停止递归
Sep 09 Python
Python+Appium实现自动抢微信红包
May 21 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禁止页面缓存的代码
2011/10/23 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php将字符串随机分割成不同长度数组的方法
2015/06/01 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
PHP Ajax跨域问题解决方案代码实例
2020/08/01 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
一个获取第n个元素节点的js函数
2014/09/02 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
纯JS代码实现气泡效果
2016/05/04 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
2016/11/16 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
2017/04/13 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python中count函数简单的实例讲解
2020/02/06 Python
python数据爬下来保存的位置
2020/02/17 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
幼儿园园长个人总结
2015/03/02 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书