标签:文件 pyinstaller -- AutoML params 封装 csv 打包 dict
背景
自己开发了一套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在打包过程中会在同级目录生成如下文件:
-
在工作目录生成 **.spec 文件;
-
创建一个 build 文件夹;
-
写入一些日志文件和中间流程文件到 build 文件夹;
-
创建 dist 文件夹;
-
生成可执行文件到 dist 文件夹(我们所需的可执行文件就在这个文件夹中)
-
如果编译中出现错误,会生成debug.log的日志文件;
windows中,会自动打包为.exe后缀的可执行文件,双击即可执行
linux中,会打包为一个无后缀的文件,使用 ./文件名 即可执行
step4:结果验证
经验证,使用封装文件建模,结果与使用源码建模相同
优点:简单、方便
缺点:无法跨平台,windows打包的文件只能在windows环境中执行
方法二:Cython生成pyd
待续。。。
标签:文件,pyinstaller,--,AutoML,params,封装,csv,打包,dict 来源: https://blog.csdn.net/slibra_L/article/details/110092298
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。