最近做完一个自动化测试的项目,一直以来都是自己在pycharm上运行测试,有时候测出来问题想把脚本给研发用的时候,往往需要配置环境或者重新装一些第三方软件,很麻烦。
于是就想到了是不是可以把这些脚本和系统测试工程打包,然后给大家共享使用。
网上查了查,似乎pyinstaller打包成exe比较符合我的需求,于是开始研究,中间遇到很多问题,也看了大部分的经验分享,终于完成,现在记录下来,方便有需要的人参考使用。
环境:Windows 7, Python 3.6.7
一、pyinstaller的安装:
首先去官网看一下支持的python版本,安装pyinstaller和pywin32,这一步不做太多描述,基本不会有太多问题。
二、打包单个文件:
1、打开命令行窗口,进入要打包文件路径:pyinstaller -F main.py
执行完成会在当前目录下新生成两个文件夹:build,dist
build 文件夹是在打包过程中临时存放中间文件的地方,基本上用不到
dist 文件夹存放最终生成的exe
还会生成一个main.spec文件,与你的执行脚本main.py同名,这个文件是执行生成exe的配置文件。打包单个文件的时候用不到,在打包多文件的时候详细介绍。
2、添加图标:
推荐一个图标网站:https://www.easyicon.net/
将想要的图标放到打包文件同级目录下,执行命令:pyinstaller -F -i picture.ico main.py, 图标名称在前面。
三、打包整个工程:
以下是我在pycharm下的工程WebTest,测试用例在TestCase路径下,run_all_case.py是入口文件,用来执行所有的测试用例并生成测试报告。
命令行窗口进入WebTest所在目录,执行:pyinstaller -D run_all_case.py
删除build和dist文件夹(也可以不删),后面执行spec文件会重新生成。
生成run_all_case.spec,进行修改:
修改如下面红框所示:
第一行是入口文件。如果还需要执行别的文件,在后面加上就行。
最下面的是要添加的图标。
datas里面有2组tuple,第一组是我的测试工程,因为里面有一些测试需要用到的图片,文件和其它资源等。
如果不添加这个,最终生成的exe执行之后会报错:No such file or directory:
仔细查看报错的路径,是否报错的文件使用了__file__,因为在pyinstaller 打包后的exe 运行时会在C:UsersAdministratorAppDataLocalTemp 新增了一个临时文件夹如“_MEIxxxxxx” 所有py代码都会在临时存放在这里。
另外一种方法是修改代码路径:
def path(file_path):
if hasattr(sys, "_MEIPASS"):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, file_path)
spec文件修改完成之后命令行执行:
完成之后进入dist un_all_case下查看,生成了run_all_case.exe。第一次生成最好不要双击运行,直接在命令行窗口运行,如果有报错会在窗口打印出来。