python打包成可执行程序踩坑总结

Posted by FanHao on 2018-10-18

前言

为了方便将开发的测试工具交付给测试人员使用,查阅资料得知python有以下几个打包工具。将使用过程与心得总结记录下来。
持续更新中····

py2exe

py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具。这样,你就可以不用装python和其他相关环境,而可以在windows系统上运行这个可执行程序。

用法:

1、写一个用于发布程序的设置脚本例如setup.py,如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#coding=utf-8
from distutils.core import setup
import sys
sys.path.append('./')
import py2exe

#this allows to run it with a simple double click.
# sys.argv.append('py2exe')

py2exe_options = {
"includes": ["sip"],
"dll_excludes": ["MSVCP90.dll"],
"compressed": 0,
"optimize": 2,
"ascii": 0
# "bundle_files": 1
}

setup(
name = 'TstLinkNew',
version = '1.1.8',
windows = [{"script":'TestLinkNew.py',"icon_resources":[(1,"testlinknew.ico")]}],
# zipfile = None,
options = {'py2exe': py2exe_options}
)

2、执行python setup.py py2exe,执行成功后,会得到一个build文件夹和一个dist文件夹。其中,dist文件夹,就是你得到的打包程序。
3、控制台程序使用setup(console=[“helloworld.py”]) ,带GUI界面程序使用setup(windows=[“helloworld.py”])
3、如果要把python编译的所有文件打包到一个exe中,就需要在setup()中设置2个参数:options中的bundle_files和zipfile。
4、其他一些打包参数,请查阅官方文档。

pyinstaller

pyinstaller也是一个打包工具,它的用法相对py2exe比较简单,我比较常用到的是这个打包工具。

用法

1、项目所在目录打开cmd命令框,执行pyinstaller项目所在目录打开cmd命令框,执行pyinstaller -F WinMain.py命令,将会生成dist目录和bulid目录。
2、dist目录存在有单个WinMain.exe程序,但是双击无法执行。因为我的项目存在的配置文件config.ini,没有被打包进WinMain.exe中,所以程序无法运行。
3、编辑器打开WinMain.spec文件,在datas选项中添加config.ini文件,如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# -*- mode: python -*-

block_cipher = None


a = Analysis(['WinMain.py'],
pathex=['D:\\2018H2自动化工作\\IgmpCli'],
binaries=[],
datas=[('D:\\2018H2自动化工作\\IgmpCli\\config.ini','.')],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)

pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='WinMain',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
runtime_tmpdir=None,
console=True )

4、然后在cmd命令框中执行pyinstaller -F WinMain.spec命令,此时生成WinMain.exe已经打包了config.ini文件,双击WinMain.exe能够运行。
5、同理添加其他一些图标资源文件,也可以打包进exe中。

帮助信息

官方文档请点击

py2app

Py2app是一个在MAC系统下打包的可执行程序(*.app)的工具包。
因为我目前还未使用过此工具包,所以还未遇到坑。