
# 函数依赖包概述
#### 函数依赖包简介
函数依赖包包含支持函数业务代码运行的公共库，可以将代码所需的公共库封装成依赖包进行单独管理，便于多函数共享，同时也能有效缩减函数代码在部署与更新过程中的体积。
FunctionGraph支持对同一依赖包进行版本迭代，即同一依赖包可拥有多个版本，便于系统化管理。
函数依赖包分为公共依赖包与私有依赖包。具体配置指导请参考[为函数配置依赖包](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_2119.html)章节。
- [公共依赖包]
  公共依赖包是FunctionGraph内置提供的依赖包，可在函数代码中直接添加所需运行时的依赖包使用，以支持代码实现业务逻辑。
  相较于私有依赖包，公共依赖包有以下优势：
  - 开箱即用：免去依赖包构建和上传的步骤，直接在函数详情页添加即可使用。无需过多关注如何配置代码运行环境，使您能更专注于代码和业务逻辑的优化。
  
  - 减少延迟：FunctionGraph将公共依赖缓存在平台内，相较于私有依赖包，代码冷启动时无需额外时间从存储服务获取依赖文件，减少了网络延迟。
  
  - 简化操作：私有依赖的文件大小限制为300MB，处理大文件时需拆分并多次上传；而公共依赖包不受300MB的文件限制，简化了添加与删除的操作。
   
- [私有依赖包]
  私有依赖包是指在本地将业务代码所需的公共库自行封装的包，即自行创建的依赖包。各运行时函数的私有依赖包制作示例请参见[制作函数的私有依赖包](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0398.html)。
 #### 支持引入的依赖库说明
FunctionGraph除了支持配置包外，还支持直接在代码中引入标准库和部分非标准库使用。
- 标准库 对于标准库，无论是在线编辑或是本地开发代码打包上传至FunctionGraph，均可以直接在代码中引入使用。
  
- FunctionGraph内置的非标准库 FunctionGraph内置了部分运行时的非标准库，如[表1]、[表2]所示。使用方法同标准库，在编写代码时直接引入即可。
   表1Node.js Runtime集成的三方件 
  | 名称              | 功能                                                                                                                   | 版本号     |
  |:---|:---|:---|
  | q               | 异步方法封装。                                                                                                              | 1.5.1   |
  | co              | 异步流程控制。                                                                                                              | 4.6.0   |
  | lodash          | 常用工具方法库。                                                                                                             | 4.17.10 |
  | esdk-obs-nodejs | OBS sdk。                                                                                                             | 2.1.5   |
  | express         | 极简web开发框架。                                                                                                           | 4.16.4  |
  | fgs-express     | 在FunctionGraph和API Gateway之上使用现有的Node.js应用程序框架运行无服务器应用程序和REST API。提供的示例允许您使用Express框架轻松构建无服务器Web应用程序/服务和RESTful API。 | 1.0.1   |
  | request         | 简化HTTP调用，支持HTTPS并默认遵循重定向。                                                                                            | 2.88.0  |
     
  在函数代码中使用Node.js运行时引入依赖库示例如下：
  ```
  const ObsClient = require('esdk-obs-nodejs');
  ```
   表2Python Runtime支持的非标准库 
  | 模块        | 功能                                   | 版本号                                                                                                                                                                                                                          |
  |:---|:---|:---|
  | dateutil  | 用于处理日期和时间的高级库，支持日期解析、格式化和时区操作。       | 2.6.0                                                                                                                                                                                                                        |
  | requests  | HTTP库，用于发送HTTP请求和处理响应。               | 2.7.0                                                                                                                                                                                                                        |
  | httplib2  | HTTP客户端库，支持HTTP/HTTPS请求、认证和代理。       | 0.10.3                                                                                                                                                                                                                       |
  | numpy     | 用于科学计算的库，支持高效的数组操作和数学函数。             | Python 2.7，numpy==1.16.6 Python 3.6，numpy==1.18.5 Python 3.9，numpy==1.18.5 Python 3.10，numpy==1.24.2 |
  | redis     | 用于连接和操作Redis数据库的库，支持多种数据结构。          | 2.10.5                                                                                                                                                                                                                       |
  | ObsClient | 对象存储服务（OBS）的Python客户端，用于管理对象存储资源。    | 3.0.3                                                                                                                                                                                                                        |
  | smnsdk    | 消息通知服务（SMN）的Python SDK，用于访问公有云SMN服务。 | 1.0.1                                                                                                                                                                                                                        |
     
  

- 其他第三方依赖库 需要在本地将依赖的第三方库打包为ZIP文件，上传至OBS桶或直接在函数控制台上传，在"代码"页签下添加相关的依赖包，即可在函数代码中使用。详细操作步骤请参见[为函数配置依赖包](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_2119.html)。
  
 
#### 相关文档
除使用控制台外，函数工作流支持通过API的方式管理函数依赖包，详情请参见[函数依赖包API](https://support.huaweicloud.com/api-functiongraph/Dependencies.html)。
