云函数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镜像重新打包安装依赖即可。
- Codeforces 839D Winter is here【数学:容斥原理】
- Codeforces 839C Journey【DFS】
- Facebook的漏洞可以让攻击者在分分钟内重置用户账户密码
- 【Java学习笔记之十七】Java中普通代码块,构造代码块,静态代码块区别及代码示例分析
- 【机器学习笔记之六】Bagging 简述
- 洛谷 P1553 数字反转(升级版)【字符串+STL stack】
- C# 实现发送手机短信
- 软件测试人员必须掌握的Linux基本命令
- 【机器学习笔记之五】用ARIMA模型做需求预测用ARIMA模型做需求预测
- Capturing Packets in Linux at a Speed of Millions of PPS
- 【机器学习笔记之四】Adaboost 算法
- 【Java学习笔记之十九】super在Java继承中的用法小结
- 【Java学习笔记之二十一】抽象类在Java继承中的用法小结
- 【Java学习笔记之二十】final关键字在Java继承中的用法小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python五十五课——calendar模块
- python五十六课——正则表达式(常用函数之match)
- python五十六课——正则表达式(常用函数之search())
- python五十六课——正则表达式(常用函数之findall)
- python五十七课——正则表达式(元字符)
- python五十七课——正则表达式(边界字符)
- python五十七课——正则表达式(多个字符)
- python五十八课——正则表达式(分组)
- python五十八课——正则表达式(替换)
- 配置Tomcat使用https协议(单向认证)
- python五十八课——正则表达式(切割)
- python五十九课——正则表达式的拓展内容
- 配置SVN的hooks功能自动更新代码
- python六十课——高阶函数之map
- python六十一课——高阶函数之reduce