使用Pyisntaller打包airtest脚本可能出现的问题。
>>>打包完成之后仍然使用本地的python环境
脚本中run_script()来调用air脚本,而不是直接使用subprocess启动命令行运行。
Run_script()调用方法:
from airtest.cli.runner import AirtestCase, run_script
from argparse import *
args = Namespace(device=["android://127.0.0.1:5037/{设备序列号}"], log=False, recording=None, scirpt=script, compress=0, no_image=0)
run_script(args, AirtestCase)
>>>打包成onefile形式时候运行提示缺少文件
所有需要引用文件的地方,路径需要按照以下格式书写,以同时满足调试和打包完成都可以运行的需求
if getattr(sys, 'frozen', False):
bundle_dir = sys._MEIPASS
else:
bundle_dir = os.path.dirname(os.path.abspath(__file__))
如果脚本运行期间并未进行路径切换操作,一直在目录最上层进行操作,所以else下方的bundle_dir可以替换为:
bundle_dir = os.getcwd()
接着在bundle_dir接上需要调用文件的相对路径即可,例如:
scirpt = bundle_dir = '/CtsVerifier_oak.dir'
>>>打包成功后运行出现GBK编码错误
将Python/Lib/site-packages/PyInstaller/loader/pyimod03_importers.py中的298行附近的
with open(filename, 'r') as fs:修改为
with open(filename, 'r', encoding='utf-8')指定编码格式。
(上面的文件路径为python3.7,其他版本可能会有不同)
打包air脚本时候需要将它当成资源文件打包,放在data参数中。
还有可能需要额外导入的包:markupsafe, jinja2(模板), poco, airtest, hrpc