其他分享
首页 > 其他分享> > pyinstaller封装AutoML代码

pyinstaller封装AutoML代码

作者:互联网

背景

自己开发了一套AutoML代码,虽然比不上市面上成熟的AutoML,但至少也是集多种祖传操作于一身,且可以直接输出公司需要的报告,但在一些联合建模的场景下,可能存在代码泄露的风险,所以最近在调研如何将代码封装起来

方法一:pyinstaller

step1:新建一个虚拟环境

一定一定要新建一个虚拟环境,由于pyinstaller会自动封装虚拟环境下的包,如果环境中有一些非必须的包,那么封装后的文件会十分的大!

第一次打包后生成的文件有300M,新建环境且仅安装必须的包后,打包生成的文件仅70M。

step2:代码改造

AutoML方法有很多入参,如果自动执行,如何读取这些入参呢?我想到用csv作为配置文件

具体做法是在同级目录下放置一个csv文件,里面存着所有入参,然后在主函数中读取这个csv即可

if __name__ == '__main__':
    # 打包后的操作,读取config.csv并进行建模
    df_params = pd.read_csv('./config.csv',encoding='gbk')
    params_list = list(df_params['params'].values)
    params_dict = {}
    for param in params_list:
        params_dict[param] = eval(df_params[df_params.params==param]['values'].values[0])
        print(param,params_dict[param])

    train = pd.read_csv(params_dict['train_path'])
    test = pd.read_csv(params_dict['test_path'])
    amp = AutoModelPlus(params_dict['outpath'])

在一台新机器上建模时,只要修改csv文件进行简单配置即可

step 3:打包

在step1中新建的虚拟环境下,执行pyinstaller -F 文件名.py(你的主函数文件),即可完成打包,常用参数如下

-h,--help查看该模块的帮助信息
-F,-onefile产生单个的可执行文件
-D,--onedir产生一个目录(包含多个文件)作为可执行程序
-a,--ascii不包含 Unicode 字符集支持
-d,--debug产生 debug 版本的可执行文件
-w,--windowed,--noconsolc指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,--nowindowed,--console指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,--out=DIR指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,--name=NAME指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

pyinstaller在打包过程中会在同级目录生成如下文件:

  1. 在工作目录生成 **.spec 文件;

  2. 创建一个 build 文件夹;

  3. 写入一些日志文件和中间流程文件到 build 文件夹;

  4. 创建 dist 文件夹;

  5. 生成可执行文件到 dist 文件夹(我们所需的可执行文件就在这个文件夹中)

  6. 如果编译中出现错误,会生成debug.log的日志文件;

windows中,会自动打包为.exe后缀的可执行文件,双击即可执行

linux中,会打包为一个无后缀的文件,使用 ./文件名 即可执行

 

step4:结果验证

经验证,使用封装文件建模,结果与使用源码建模相同

优点:简单、方便

缺点:无法跨平台,windows打包的文件只能在windows环境中执行

 

方法二:Cython生成pyd

待续。。。

 

标签:文件,pyinstaller,--,AutoML,params,封装,csv,打包,dict
来源: https://blog.csdn.net/slibra_L/article/details/110092298