tencent cloud

文档反馈

部署方法

最后更新时间:2021-05-24 11:20:10

    部署方法

    腾讯云云函数提供以下几种方式部署函数,您可以按需选择使用。创建、更新函数操作详情可参见 创建及更新函数

    依赖安装和部署

    当前的函数标准 Python Runtime 中仅提供了 /tmp 目录可写,其他目录只读,因此在用到依赖库时,需要使用本地安装、打包、上传的方式。Python 依赖包通常可以与函数代码一同上传,或上传至层中,然后绑定使用。

    本地安装依赖包

    依赖管理工具

    Python 可以通过 pip 包管理器进行依赖管理。由于环境配置不同,可自行将 pip 替换为 pip3pip2

    使用方法

    1. requirements.txt 中配置依赖信息。
    2. 通过在代码目录下执行 pip install -r requirements.txt -t . 命令安装依赖包。通过使用 -t 参数,可以指定依赖包的安装目录,在项目代码目录下执行时,可以使用 -t . 安装在当前目录下。
    注意:

    • 您可以使用 pip freeze > requirements.txt 生成当前环境下所有依赖的 requirements.txt 文件。
    • 函数运行的系统是 CentOS 7,您需要在相同环境下进行安装。若环境不一致,则可能导致上传后运行时出现找不到依赖的错误。您可参考 云函数容器镜像 进行依赖安装。
    • 若部分依赖涉及动态链接库,则需手动复制相关依赖包到依赖安装目录后再打包上传。详情请参阅 使用 Docker 安装依赖

    示例

    1. 在本地安装 requests 依赖,其中代码文件 index.py 如下所示:
      # -*- coding: utf8 -*-
      import requests
      def main_handler(event, context):
          addr = "www.qq.com"
          resp = requests.get(addr)
          print(resp)
          return resp
    2. 使用 pip3 install requests -t . 在项目当前目录安装 requests 依赖。代码文件如下所示:
    $ pip3 install requests -t .
    Collecting requests
        Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
    Collecting certifi>=2017.4.17
        Using cached certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
    Collecting chardet<5,>=3.0.2
        Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
    Collecting idna<3,>=2.5
        Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
    Collecting urllib3<1.27,>=1.21.1
        Using cached urllib3-1.26.4-py2.py3-none-any.whl (153 kB)
    Installing collected packages: urllib3, idna, chardet, certifi, requests
    Successfully installed certifi-2020.12.5 chardet-4.0.0 idna-2.10 requests-2.25.1 urllib3-1.26.4
    
    $ ls -l
    total 8
    drwxr-xr-x   3 xxx  111    96  4 29 16:45 bin
    drwxr-xr-x   7 xxx  111   224  4 29 16:45 certifi
    drwxr-xr-x   8 xxx  111   256  4 29 16:45 certifi-2020.12.5.dist-info
    drwxr-xr-x  44 xxx  111  1408  4 29 16:45 chardet
    drwxr-xr-x   9 xxx  111   288  4 29 16:45 chardet-4.0.0.dist-info
    drwxr-xr-x  11 xxx  111   352  4 29 16:45 idna
    drwxr-xr-x   8 xxx  111   256  4 29 16:45 idna-2.10.dist-info
    -rw-r--r--@  1 xxx  111   177  4 29 16:33 index.py
    drwxr-xr-x  21 xxx  111   672  4 29 16:45 requests
    drwxr-xr-x   9 xxx  111   288  4 29 16:45 requests-2.25.1.dist-info
    drwxr-xr-x  17 xxx  111   544  4 29 16:45 urllib3
    drwxr-xr-x  10 xxx  111   320  4 29 16:45 urllib3-1.26.4.dist-info

    打包上传

    依赖可以和项目一同上传,并在函数代码中通过 import 方式引入和使用。同时,依赖也可以打包部署为层,并通过在函数创建部署时,与函数绑定,提供复用能力。

    您可以通过控制台选择本地文件夹的方式自动化打包,也可以通过手工打包的方式形成可以用于部署函数或层的 zip 包。在打包部署时,需要注意的是均在项目目录下进行打包操作,即确保代码、依赖均在 zip 文件内的根目录中。详情可参见 打包要求

    特殊依赖包

    部分 Python 的依赖包,在安装时需要进行相关的编译操作,例如 pycryptodome 依赖。由于编译程序会根据不同 OS 进行操作系统相关的编译操作,在 Windows、Mac 等环境下编译生成的依赖库及动态库等程序,可能无法在云函数的环境中运行。您可通过以下方案尝试解决:

    • 寻找针对 FaaS 的开源实现,使用开源实现已经准备好的依赖库。
    • SCF 公共 Layer 项目中寻找依赖或提交需求,本项目用于常用特殊依赖包的整理和存储,并以 Layer 形式提供部署支持。
    • 通过使用容器方案及 SCF 容器镜像,在本地完成特殊依赖包安装和内容抽取后,打包上传至代码运行环境中。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持