使用Nuclio运行含自定义子模块的Python数据科学流水线是否可行?
关于Nuclio调用自定义子模块的解决方案
完全可以通过Nuclio原生能力实现需求,无需手动传递zip包解压运行,可选用以下三种符合规范的方案,适配不同的迭代场景:
- 自定义运行时镜像方案:适合自定义子模块迭代频率较低的场景
基于Nuclio官方提供的Python基础镜像(如nuclio/python:3.9)编写Dockerfile,将my_big_submodule_1、my_big_submodule_2等自定义包拷贝到镜像内的Python搜索路径(如/usr/local/lib/python3.9/site-packages/或函数工作目录/opt/nuclio),构建完成后将该镜像指定为你的函数运行时即可。此时你贴出的函数代码无需做任何修改,可直接正常导入自定义子模块运行。 - 构建配置注入方案:无需自行维护镜像,适合子模块迭代频率中等的场景
在Nuclio函数的构建配置中添加自定义逻辑:- 如果子模块存储在内部Git仓库,可在
build.commands配置中添加命令:pip install git+<内部Git仓库地址/对应子模块地址>,Nuclio构建函数时会自动安装自定义模块 - 如果子模块是本地文件,可通过
build.extraFiles配置将子模块目录指定为要注入的资源,构建时会自动同步到函数运行目录
- 如果子模块存储在内部Git仓库,可在
- PVC共享挂载方案:适合子模块迭代频繁、同项目多函数共用自定义包的场景
先将所有自定义子模块上传到Kubernetes集群的PVC存储卷中,在Nuclio函数配置中挂载该PVC,同时添加环境变量PYTHONPATH=<PVC挂载路径>,函数运行时会自动搜索该路径下的自定义包,子模块更新时仅需修改PVC内的文件,无需重新构建任何函数。
Nuclio的函数构建和运行流程完全可定制,不存在仅支持通用依赖包的限制,以上三种方案均为框架原生支持的能力,稳定性和规范性远高于手动传zip包的临时方案。
内容的提问来源于stack exchange,提问作者Asher11
相关产品推荐
相关产品推荐

