云函数Python依赖包安装,应用启动超时问题排查

时间:2022-07-28
本文章向大家介绍云函数Python依赖包安装,应用启动超时问题排查,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

背景

腾讯云云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。 您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。

云函数(SCF)各个运行时已内置部分常用依赖库,可是我们使用的时候总是会依赖一些额外的第三方包,这种情况就需要自己安装并上传了。安装依赖包大部分情况下按照官方文档:https://cloud.tencent.com/document/product/583/47561#python是没有任何问题的,可是有些情况会存在native的so文件abi的问题,比如安装Python依赖库dlib的时候。

问题排查原因及解决方案

按照官方文档执行依赖包安装命令:

$ docker run -it --network=host -v /path/to/your-project:/tmp/your-project python:3.6.1  
/bin/bash -c 'cd /tmp/your-project 
&& pip install boost 
&& pip install cmake 
&& pip install dlib -t .'

然后上传在云函数控制台页面上传代码及打包后的依赖:

编写测试代码,这里不做任何逻辑,直接引入dlib

# -*- coding: utf8 -*-
import json
import requests
import sys
import os
import dlib

# sys.path.append('/tmp')
# from mergeface import cv2
# print(os.system('ls'))
# os.system('pwd')
def main_handler(event, context):
    print("Received event: " + json.dumps(event, indent = 2)) 
    print("Received context: " + str(context))
    print("Hello world223")
    return("test dlib")

点击测试,直接报错了,初始化超时但是没有报任何异常信息:

原因分析

可能是native的so文件abi的问题,依赖安装文档有这样的说明:

由于本机的mac系统打的包,所以可能存在问题。

解决方案/最佳实践

构建一个centos7和Python3.6的环境重新安装依赖包即可,参考dockerfile如下:

FROM centos:centos7
WORKDIR /${your_path}

USER root

    
RUN

RUN yum install -y wget 
&& wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz 
&& yum -y install zlib-devel openssl-devel libffi-devel gcc make 
&& tar -xf /${your_path}/Python-3.6.1.tar.xz 
&& rm -rf /${your_path}/Python-3.6.1.tar.xz 
&& cd /${your_path}/Python-3.6.1/ 
&& ./configure 
&& make 
&& make install 
&& pip3 install --upgrade pip 
&& pip install boost 
&& pip install cmake 
&& rm -rf /${your_path}/Python-3.6.1/

然后基于该docker镜像重新打包安装依赖即可。