如何通过CLI为IBM Cloud无服务器Python3.9 Action导入Cloudant模块
报错原因
IBM Cloud 无服务器Python 3.9运行时默认不预装cloudant第三方库。你CLI本地的Python 3.8环境之前手动装过cloudant依赖,所以本地跑不报错,云端运行时找不到对应模块就会抛出ModuleNotFoundError。
CLI部署配置步骤
- 准备部署工作目录
本地新建空目录作为部署根目录,进入目录后执行命令,把适配Python 3.9、x86架构的cloudant依赖直接安装到当前目录,避免架构/版本不兼容:mkdir cloudant-action-demo && cd cloudant-action-demo pip3 install --target ./ cloudant --platform manylinux2014_x86_64 --python-version 3.9 --only-binary=:all: - 修正原有代码并保存为入口文件
把代码存为目录下的__main__.py,原代码有两个问题要改:一是全局定义的dict变量和函数入参重名会覆盖参数,二是数据库实例没有对应的.json属性直接返回会报错,修正后参考:from cloudant.client import Cloudant def main(params): client = Cloudant.iam( user_name=params["COUCH_USERNAME"], api_key=params["IAM_API_KEY"], connect=True ) my_database = client['reviews'] # 这里替换成你实际需要的文档增删改查逻辑,示例取数据库元信息 resp = my_database.metadata() client.disconnect() return {"result": resp} - 执行CLI命令创建Action
在部署目录下直接执行创建命令,CLI会自动把当前目录下的代码+依赖打包上传,指定运行时为Python 3.9:ibmcloud fn action create cloudant-reviews-op --kind python:3.9 . - 配置Action鉴权参数
不要把密钥硬编码在代码里,通过CLI参数注入Cloudant鉴权信息:ibmcloud fn action update cloudant-reviews-op --param COUCH_USERNAME "你的Cloudant账号用户名" --param IAM_API_KEY "你的Cloudant IAM密钥" - 验证运行
执行调用命令看是否正常返回结果:ibmcloud fn action invoke cloudant-reviews-op --result
注意点:如果后续要更新代码,直接在目录改完
__main__.py后执行ibmcloud fn action update cloudant-reviews-op --kind python:3.9 .即可;如果本地pip装依赖时提示权限问题,加--user参数或者用虚拟环境操作就行。
内容的提问来源于stack exchange,提问作者TAMETA2009
相关产品推荐
相关产品推荐

