IBM Watson Studio:如何运行.tar.gz部署的main.py并支持外部API调用
实现外部触发IBM Cloud上Python优化程序的可行方案
方案1:使用IBM Cloud Functions(无服务器模式,推荐轻量触发场景)
- 解压你已有的
tar.gz代码包,新增requirements.txt依赖清单,可在本地正常运行的环境中执行pip freeze > requirements.txt生成,确保文件中包含CPLEX、requests等你用到的所有依赖 - 将
main.py、sub1.py、requirements.txt三个文件重新打包为zip包,注意不要套外层文件夹,确保解压后文件直接在根目录 - 在IBM Cloud控制台创建Python运行时的Cloud Functions动作,上传刚才生成的zip包
- 把你
main.py中原有的全流程执行逻辑封装为Cloud Functions的默认入口函数def main(params):,原有业务逻辑不需要修改,直接放到该函数内即可 - 开启动作的「Web操作」权限,系统会自动生成公开可调用的HTTP接口地址,外部系统向该地址发送GET/POST请求即可触发全流程运行
- 提前调整运行时的超时时间、内存上限,适配CPLEX求解的资源消耗,调用外部API的密钥、CPLEX许可等敏感信息请放到服务的环境变量中,不要硬编码在代码里
方案2:在Watson Studio中部署为可触发作业(推荐无需迁移代码的场景)
- 你已经将代码上传到Watson Studio,直接在项目中创建新的「作业」,选择
main.py作为执行入口,运行环境选择预装了CPLEX的环境模板,没有对应模板的话可以自定义添加CPLEX依赖 - 作业创建完成后,在设置页开启「API触发」功能,系统会生成对应的调用地址和鉴权令牌
- 外部系统携带鉴权信息调用该API即可触发作业启动,自动执行数据拉取、优化求解、结果回传的全流程
- 该方案可以直接复用Watson Studio的CPLEX许可,不需要额外配置授权,适合代码已经在Watson Studio中调试通过的场景
方案3:使用IBM Cloud Code Engine(适合求解时间长、资源消耗大的场景)
- 如果你的CPLEX求解过程需要运行十几分钟甚至更久,无服务器模式的超时限制无法满足,可将代码打包为Docker镜像,参考Dockerfile如下:
FROM python:3.9-slim WORKDIR /app COPY . /app RUN pip install --no-cache-dir -r requirements.txt CMD ["python", "main.py"]
- 将构建好的镜像上传到IBM Cloud容器镜像仓库
- 在Code Engine中创建对应作业,关联刚才的镜像,根据需求配置CPU、内存、最长运行时间上限
- 开启作业的HTTP触发功能,生成外部可调用的接口地址,外部请求即可触发程序运行
所有方案都需要配置对应网络权限,确保运行环境可以访问你调用的外部API接口,如果外部API有IP白名单限制,将对应IBM Cloud服务的出口IP加入白名单即可。另外如果使用非Watson Studio的运行环境,需要确保你持有合法的CPLEX使用许可,避免授权问题。
内容的提问来源于stack exchange,提问作者user17068386
相关产品推荐
相关产品推荐

