Lv.的博客

pyinstaller 打包多文件工程成 exe

 

  最近做完一个自动化测试的项目,一直以来都是自己在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:\Users\Administrator\AppData\Local\Temp 新增了一个临时文件夹如“_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\run_all_case\下查看,生成了run_all_case.exe。第一次生成最好不要双击运行,直接在命令行窗口运行,如果有报错会在窗口打印出来。

     

posted @ 2021-10-25 13:20  Avatarx  阅读(448)  评论(0编辑  收藏  举报