PyInstaller打包python脚本
用python写的工具写好了,想打包然后发给测试同事使用,最后选择了PyInstaller,支持Windows、Linux、OS X,支持打包成一个文件夹或单个EXE文件。
我是直接在线安装的,在CMD输入:pip install pyinstaller
自动下载了PyInstaller-3.1.1.tar.gz和pypiwin32-219-cp27-none-win_amd64.whl并安装。
如果不行也可以去官网自己下载安装(http://www.pyinstaller.org/),不过应该要先安装pypiwin32。
安装后,把要打包的文件main.py(界面),b.py(逻辑,在main中调用),config.ini(配置文件)复制到F:\pkg
在CMD中进入F:\pkg,输入:pyinstaller main.py
然后就在F:\pkg生成build和dist文件夹和一个main.spec配置文件,dist下就是打包好的文件了,运行main.exe,一闪就没了,在CMD再次运行,报错是找不到ini文件,把ini复制到dist下,再次运行,可以了。
但是运行main.exe后,会多出一个CMD窗口。后面搜索后查找有一个参数-w, --windowed, --noconsole
可以关闭控制窗口。
删除打包的文件,重新打包:pyinstaller -w --windowed --noconsole main.py
将config.ini复制过去后再次运行,OK了,这次没有控制窗口了,不过程序在调用subprocess时,仍会闪现一下控制窗口,不过没关系了,这也算间接提示我命令运行了吧。但我的程序后来还遇到个问题,有个函数以此方法打包,会无法调用。
然后再想,打包不可能需要手动复制ini文件的,应该可以一起打包进去。
再次查询pyinstaller的官方wiki,发现可以编辑main.spec实现。类似这样
a = Analysis(...
datas=[ ('src/README.txt', '.') ],
...
)
只要修改datas元组就可以了。第一参数是文件目录,第二个参数是放在打包好的文件的目录,'.'就是首级目录了
修改后,再运行命令pyinstaller -w --windowed --noconsole main.spec
OK了,这次打包的时候直接就把config.ini打进去了,不过我怎么觉得还是我复制过去更方便呢。。。
以上打包都是打成一个文件夹,后来试了下打成单个EXE
命令:pyinstaller -F -w --windowed --noconsole main.py
然后同样把config.ini复制过去就OK了
然后我们可以加个图标。首先找个图片,然后去http://www.ico.la/转换一下格式,我选的128*128
将保存的图片ico.ico放到F:\pkg
输入命令:pyinstaller -F -w --windowed --noconsole -i ico.ico main.py
参考:
官方WIKI:http://pythonhosted.org/PyInstaller/#using-spec-files
http://www.cnblogs.com/mywolrd/p/4756005.html
http://www.crifan.com/use_pyinstaller_to_package_python_to_single_executable_exe/
http://www.cnblogs.com/DxSoft/archive/2010/05/14/1735199.html
--------------------------------------------------------------------------------
关注微信公众号(测试工程师小站)即可在手机上查阅,并可接收更多测试分享,发送【测试资料】更可获取百G测试教程~