logo科技微讯

部署 Python 代码到华为云函数

作者:科技微讯
日期:2023-05-17
📝 笔记

关键是怎样把安装的第三方依赖和用户写的代码打包在一起。华为文档建议把依赖和用户代码分开打包上传,依赖作为层绑定到函数,我觉得有点麻烦。因为腾讯云和华为云函数很类似,所以可以参考腾讯云的部署方式,根据腾讯的文档,依赖其实不需要做特别处理,可以直接和用户代码文件一起打包。

以下是一个例子:

  • 创建一个文件夹,并 cd 入这个文件夹;
  • 执行 python3 -m venv .venv 创建虚拟环境;
  • 执行 source './.venv/bin/activate' 激活该虚拟环境;
  • 执行 pip3 install requests==2.30.0 urllib3==1.26.2 安装所需的库;
  • 在文件夹中增加 index.py 文件,并写入代码:
import requests
import json

def handler(event, context):
    response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
    response_json = response.json()
    print(json.dumps(response_json, indent=4))
    return response_json
  • 执行下面这条命令把安装的所有库复制到 ./packages 文件夹中,正如前面所说,安装的依赖不需要特别处理,可以和用户代码一起打包,所以我把这些依赖从虚拟环境中复制出来并放在 index.py 旁边;
cp -r ./.venv/lib/python3.9/site-packages ./packages
  • 执行下面这条命令把用户代码以及 ./packages 文件夹全部打包在一起,这条命令会忽略所有隐藏文件,所以 .venv 会被忽略;
zip -rq code.zip *
  • 另一种做法是不把依赖从 .venv 中复制出来,而是直接打包 .venv,这时需要把上面这行命令的 * 改为 .
zip -rq code.zip .
  • 把生成的 code.zip 上传到华为云函数即可,可以通过华为云网页后台手动上传,也可以用云函数的 API 上传,还可以用华为的 CLI 工具上传

相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论