使用Pyinstaller转换.py文件为.exe可执行程序过程详解


Posted in Python onAugust 06, 2019

 前言

pyinstaller能够在Windows、Linux等操作系统下将Python脚本打包成可直接运行程序。使Python脚本可以在没有安装Python的环境中直接运行,方便共享。

开发环境

python 2.7.12 + Windows7

注意事项

1、待转换的.py文件绝对路径最好不要包含中文字符。容易出现一些莫名其妙的问题。

2、python中需要有.py文件中用到的第三方库。否则在转换后的.exe文件中会出现不符合预期的结果。

pyinstaller安装步骤

1、配置pip镜像源。pip配置方法参考pip配置和安装第三方模块。如果已经配置,跳过。

2、打开cmd命令行窗口,输入pip install pyinstaller,安装pyinstaller库。

C:\Users\Administrator>pip install pyinstaller
Collecting pyinstaller
 Downloading http://pypi.doubanio.com/packages/3c/86/909a8c35c5471919b3854c01f43843d9b5aed0e9948b63e560010f7f3429/PyIns
taller-3.3.1.tar.gz (3.5MB)
  100% |????????????????????????????????| 3.5MB 112kB/s
Requirement already satisfied: setuptools in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: pefile>=2017.8.1 in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: macholib>=1.8 in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: dis3 in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: future in c:\python27\lib\site-packages (from pyinstaller)
Requirement already satisfied: altgraph>=0.15 in c:\python27\lib\site-packages (from macholib>=1.8->pyinstaller)
Installing collected packages: pyinstaller
 Running setup.py install for pyinstaller ... done
Successfully installed pyinstaller-3.3.1

3、确认pyinstaller安装结果,位于c:\Python27\Scripts路径下。执行where pyinstaller查看

C:\Users>where pyinstaller
c:\Python27\Scripts\pyinstaller.exe

pyinstaller基本语法

pyinstaller [options] script

options常用选项说明:

-F,-onefile: 表示生成单个可执行文件,常用。
-w, -windowed, -noconsole:表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 表示你自己自定义需要加载的类路径,一般情况下用不到
-i 表示可执行文件的图标。注意:图片后缀必须是.ico
-c,console,-nowindowed:使用控制台,无窗口(默认)
-D,-onedir:创建一个目录,包含EXE文件,但会依赖很多文件(默认选项)

基本实例:pyinstaller -F myscript.py。

pyinstaller更多语法见官网说明: https://pyinstaller.readthedocs.io/en/stable/usage.html

pyinstaller原理简介

pyinstaller其实就是把python解释器和脚本打包成一个可执行文件,和编译成真正的机器码是完全两回事。所以打包不一定会提高运行效率,可能会降低运行效率,但是好处是在运行者机器上不用安装python和脚本所依赖的库。

输入指定的脚本后,首先pyinstaller会分析该脚本所依赖的其他依赖,然后进行查找、复制,把所有相关的依赖都收集起来并惊醒加密处理,包括python解释器,最后把这些文件放在一个目录下,或者打包到一个可执行文件。然后就可以直接运行所生成的可执行文件。

需要注意的是,使用pyinstaller打包生成的可执行文件,只能再和打包机器系统相同的环境下运行。32位python环境打包的程序可以运行在32/64位windows系统上。64位python环境打包的程序只能运行在64位windows系统上。所以如果想打包程序的话,建议使用32位python环境打包。

pyinstaller使用实例

1、确认待转换的.py文件可正确运行,不存在语法错误。如ccc.py

2、执行pyinstaller -F ${Python脚本名}完成文件转换。.exe文件生成的绝对路径会在倒数第二行显示,通常位于当前目录下dist所在目录下。转换后的.exe文件名与python文件名相同。如下图所示

d:\Program Files\Notepad++>pyinstaller -F ccc.py
INFO: PyInstaller: 3.3.1
INFO: Python: 2.7.12
INFO: Platform: Windows-7-6.1.7601-SP1
.......
INFO: Redirecting Microsoft.VC90.CRT version (9, 0, 21022, 8) -> (9, 0, 30729, 4940)
INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
INFO: Bootloader c:\python27\lib\site-packages\PyInstaller\bootloader\Windows-32bit\run.exe
INFO: checking EXE
INFO: Building EXE because out00-EXE.toc is non existent
INFO: Building EXE from out00-EXE.toc
INFO: Appending archive to EXE d:\Program Files\Notepad++\dist\ccc.exe
INFO: Building EXE from out00-EXE.toc completed successfully.

FAQs

1、如果Python脚本使用到了第三方库,如何打包?

方法一:将第三方库对应的包复制到待打包python脚本的同目录下,再执行打包命令。

方法二:pyinstaller.exe -F 路径\文件名.py 路径\文件名.py

2、我的python脚本主要是命令行输出,但是程序执行完就退出无法查看相关信息,如何处理?

在python脚本最后一行添加命令:os.system('pause') 或者 raw_input('Press enter any key to exit...')

3、 我想给我的打包后的执行程序换个图标,如何处理?

使用参数-i。如命令:pyinstaller -F -i tupian\qq.ico ccc.py。文件后缀名必须是.ico

4、程序运行出现CMD窗口,如何去除?

使用Pyinstaller转换.py文件为.exe可执行程序过程详解

带上参数-w即可。pyinstaller.exe -F call_login.py -w (-w表示去掉控制台窗口显示)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
Python网络编程 Python套接字编程
Sep 13 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
Numpy数组转置的两种实现方法
Apr 17 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
python实现共轭梯度法
Jul 03 Python
python requests指定出口ip的例子
Jul 25 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
python和C++共享内存传输图像的示例
Oct 27 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 Python
django项目简单调取百度翻译接口的方法
Aug 06 #Python
python数据归一化及三种方法详解
Aug 06 #Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 #Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 #Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 #Python
Django Python 获取请求头信息Content-Range的方法
Aug 06 #Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 #Python
You might like
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
JavaScript中实现sprintf、printf函数
2015/01/27 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
JS匿名函数实例分析
2016/11/26 Javascript
jq给页面添加覆盖层遮罩的实例
2017/02/16 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
微信小程序模版渲染详解
2018/01/26 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python极简代码实现杨辉三角示例代码
2016/11/15 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
python将unicode和str互相转化的实现
2020/05/11 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
2020/12/08 Python
加热夹克:RAVEAN
2018/10/19 全球购物
某公司面试题
2012/03/05 面试题
校车安全责任书
2014/08/25 职场文书
十八大观后感
2015/06/12 职场文书
立案决定书范文
2015/06/24 职场文书