使用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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
python导出chrome书签到markdown文件的实例代码
Dec 27 Python
python操作oracle的完整教程分享
Jan 30 Python
python数据批量写入ScrolledText的优化方法
Oct 11 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
python实现暗通道去雾算法的示例
Sep 27 Python
pandas统计重复值次数的方法实现
Feb 20 Python
python自然语言处理之字典树知识总结
Apr 25 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 IDE phpstorm 常用快捷键
2015/05/18 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
JSQL SQLProxy 的 php 版本代码
2010/05/05 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jQuery动态添加
2016/04/07 Javascript
Angularjs2不同组件间的通信实例代码
2017/05/06 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
从零开始实现Vue简单的Toast插件
2018/12/03 Javascript
nodejs中实现用户注册路由功能
2019/05/20 NodeJs
three.js 制作动态二维码的示例代码
2020/07/31 Javascript
详细解读Python中的__init__()方法
2015/05/02 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
竞聘上岗演讲稿范文
2014/01/10 职场文书
公司端午节活动方案
2014/02/04 职场文书
犯错检讨书
2014/02/21 职场文书
农村文化建设标语
2014/10/07 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang
python如何为list实现find方法
2022/05/30 Python