前言
用python写的脚本做工具十分方便,但是却只能够再本机或者其他安装了相同python开发环境的机器上运行。所以一般需要外发的时候程序的时候都会将python项目打包成exe可执行的文件。
目前将python转化为exe文件的方法又两种:
- 用py2exe工具打包
- 用pyinstaller工具打包
py2exe打包的exe只能再相同的操作系统下运行,且打包文件页需要同exe下的dll和一些库的压缩包。而pyinstaller可以通过命令参数选择生成一个独立可执行的exe文件还是包含exe和dll的文件夹,pyinstaller支持多种python版本(包括2.x和3.x的版本),使用起来也相对的更加灵活,所以本文仅介绍pyinstaller的使用。
安装pyinstaller
方法一: 是用pip安装
保证python的环境正确,且安装的pip工具后,在命令行中执行以下命令:
1
pip install pyinstaller
方法二: 下载源码安装
在github上https://github.com/pyinstaller/pyinstaller下载源码,在命令行执行以下命令:
1
2
3
4cd bootloader
python ./waf configure build install
cd ..
python setup.py install
pyinstaller的使用
在命令行中执行以下命令,可以将指定的文件转化为exe文件包。
1 | pyinstaller Test.py |
执行完上面的命令后,会自动生成两个文件夹和一个新文件:build/、dist/、Test.spec。 dist目录存放最终生成的程序,build目录存放exe的中间文件,.spec文件用来提供用户自定义生成参数。
在上面的命令行中加入-F的选项,则可以指定生成为一个单独可执行的exe文件。
1 | pyinstaller -F Test.py |
打包的文件可以用UPX去压缩,命令如下,但是前提是需要先安装好UPX。
1 | pyinstaller -F Test.py --upx-dir upx391w |
使用.spec文件定制转换
通过Analysis会输出五中类型:
- pyz:python的模块
- scripts:代码源文件
- binaries:动态库
- datas:数据文件可以是任意文件类型
- zipfiles:zip格式的依赖文件,一般是egg格式的库文件
这五类为后面提供使用。
设置exe文件打包的文件
设置exe字段,exe打包了python模块、源代码、动态库、数据文件:
1
2
3
4
5
6
7
8
9
10exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='QtWindow',
debug=False,
strip=False,
upx=True,
console=True )设置输出文件夹的包含的内容
由于exe中已经打包了很多文件了,但是我并没有将界面ui文件一起打包,所以输出文件夹时把需要用到的界面文件包涵进去。
1
2
3coll = COLLECT(exe,
[('ui/testMainWindow.ui', './ui/testMainWindow.ui', 'DATA')],
name='dist')