使用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通过poll实现异步IO的方法
Jun 04 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
Python多线程实现同步的四种方式
May 02 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
Nov 03 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
pycharm重命名文件的方法步骤
Jul 29 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
用python读取xlsx文件
Dec 17 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中实现进程间通讯
2006/10/09 PHP
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
vue 中引用gojs绘制E-R图的方法示例
2018/08/24 Javascript
iview同时验证多个表单问题总结
2018/09/29 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
CSS3 @media的基本用法总结
2019/09/10 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
《北大荒的秋天》教学反思
2014/04/14 职场文书
生物科学专业自荐书
2014/06/20 职场文书
校园元旦活动总结
2014/07/09 职场文书
车队安全员岗位职责
2015/02/15 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android