使用PyInstaller将Python程序文件转换为可执行程序文件


Posted in Python onJuly 08, 2016

Windows下采用PyInstall将py文件转换成exe可执行文件
好不容易写完的py文件,想做成exe文件,最开始选择用py2exe,结果生成的exe遇到两个问题,
1. py程序里print 的信息,cmd中执行tool后并没有显示在屏幕上;
2. 调用dll接口,执行py文件时是阻塞等待的,结果cmd中执行exe时,tool很快先返回了,接口还在运行,很诡异
一时找不到解决的办法,无奈弃用了,在网上找了pyinstall,试了一下,感觉功能更强大些。。。
安装PyInstaller之前需确认首先安装了pywin32
下载地址:http://nchc.dl.sourceforge.net/project/pywin32/pywin32/Build%20218/pywin32-218.win32-py2.7.exe
 
一、PyInstaller安装
1.下载地址:http://www.pyinstaller.org/wiki
2.最新版本:PyInstaller 2.0
3.直接“解压缩”之后即可使用,解压到您想让他在的路径即可
 
二、PyInstaller配置
1.事先写好py程序
2.在命令行执行:

Python Makespec.py --console --onefile NotePad\notepad.py

报错:

Configfile is missing or unreadable. Please run Configure.py before building

3.在命令行执行:

Configure.py

报错:

Python 2.6+ on Windows support needs pywin32,Please install http://sourceforge.net/projects/pywin32/

4.安装最新版本的 pywin32-217.win32-py2.7.exe,下载地址:http://sourceforge.net/projects/pywin32/files/pywin32/Build%20217/
 
三、PyInstaller使用
PyInstaller的使用相对简单,cmd下进入解压出来的目录,执行如下命令:
python pyinstaller.py [opts] yourprogram.py

四、主要选项包括:
-F, -onefile 打包成一个exe文件
-D, -onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c, -console, -nowindowed 使用控制台,无界面(默认)
-w, -windowed, -noconsole 使用窗口,无控制台

五、注意事项
在转换之前要确保py程序可以正常通过;
如果转换过程中出现什么错误,用搜索引擎搜索解决一下。


Linux下安装pyinstaller用于将py文件打包生成一个可执行文件
一、安装使用流程

1. 首先给系统装个easy_install, 如果装了的可以跳过这步
到pypi官方网址 https://pypi.python.org/pypi/setuptools 去download最新版本

2. 官网上下载pyinstaller,当前的最新版本是2.1
(1) 网址 http://www.pyinstaller.org/

3.解包进入源码目录
(1)

tar -zxvf pyinstaller_2.1.tar.gz

(2)

cd pyinstaller-2.1

运行

python setup.py install

4. 拷贝py文件
将需打包的py文件如test.py 拷贝到当前目录

5. 生成可执行文件
cd到pyinstaller目录, 执行

python pyinstaller.py test.py

二、可能遇到的问题

1. 用户权限
直接在root用户下运行pyinstaller会报错 “cannot run pyinstaller as user root"...
所以需新增另外一个用户,并给用户对pyinstaller所在的目录及所有父目录添加读写权限,避免运行后报‘mkdir' permission denied...

2. 找不到python lib动态库
su切换到新增用户后,
pyinstaller报错找不到python动态库

raise IOError("Python library not found!")
IOError: Python library not

执行python --version查看当前版本,并查找/usr/local/lib 下有没有对应版本的libpython*.*.so文件,
如果有则跳过这步,如果没有则需要重新安装python,在python安装配置中一定要加上--enable-shared参数就可以生成对应动态链接库,如:

#./configure --enable-shared --prefix=/usr/local
#make
#make install

我环境中更新过python版本,导致/usr/lib下不是最新版本的库文件,需要将新版本拷贝到对应的/usr/lib目录下,注意有两个文件:

#cp libpython*.so /usr/lib/
#ln -s /usr/lib/libpython*.so.1.0 /usr/lib/libpython*.so
Python 相关文章推荐
新手该如何学python怎么学好python?
Oct 07 Python
Python 转义字符详细介绍
Mar 21 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 Python
python实现动态数组的示例代码
Jul 15 Python
Django ImageFiled上传照片并显示的方法
Jul 28 Python
Python中断多重循环的思路总结
Oct 04 Python
一文带你了解Python 四种常见基础爬虫方法介绍
Dec 04 Python
python matlab库简单用法讲解
Dec 31 Python
Python遍历目录中的所有文件的方法
Jul 08 #Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 #Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 #Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 #Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 #Python
Python中的os.path路径模块中的操作方法总结
Jul 07 #Python
简介Python的collections模块中defaultdict类型的用法
Jul 07 #Python
You might like
我的群发邮件程序
2006/10/09 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
做网页的一些技巧(续)
2007/02/01 Javascript
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
2009/09/23 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
2018/09/25 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
Python实战之制作天气查询软件
2019/05/14 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
weblogic面试题
2016/03/07 面试题
宠物店的创业计划书范文
2014/01/11 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
授权委托书
2014/07/31 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python