云函数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镜像重新打包安装依赖即可。
- Python filter()函数
- Python reduce()函数
- Python map()函数
- Python iterator迭代器
- How To Implement The Decision Tree Algorithm From Scratch In Python (从零开始在Python中实现决策树算法)
- 『教程』微信小程序webview的使用
- How to Save an ARIMA Time Series Forecasting Model in Python (如何在Python中保存ARIMA时间序列预测模型)
- Decision Trees in Apache Spark (Apache Spark中的决策树)
- Feature Selection For Machine Learning in Python (Python机器学习中的特征选择)
- 简约的JAVA版本MapReduce和日常No.25
- 根据职位说明使用机器学习来检索相关简历
- 微信小游戏初体验
- 一行Spark代码的诞生记(深度剖析Spark架构)
- Ray:AI的分布式系统
- 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之unittest框架实现接口测试的一个简单实例
- linux提权-Suid和Guid配置错误
- Git快速学习
- Spring笔记
- ARL灯塔最新版本2.1,现在它来了,快来看看盒子带来了什么有趣的更新
- 渗透测试常规操作记录(下)
- IntelliJ IDEA 2020.2激活破解教程
- Java String 源码分析
- Java ArrayList 源码
- Java8 HashMap 源码分析
- 数据分析方法论-统计学内容学习
- 同步与异步 Python 有何不同?
- 非线性方程组求解迭代算法&图像寻初始值讲解
- MyBatis笔记
- 网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!