
# 制作函数的私有依赖包
本章节介绍如何在本地制作函数的私有依赖包。
#### 约束与限制
- 依赖包的文件大小限制为300MB，文件限制数为30000。
- 依赖包内文件名不能以\~结尾，例如"module\~"。
- 如果安装的依赖模块需要添加依赖库，请将依赖库归档到zip依赖包文件中，例如添加.dll、.so、.a等依赖库。
- **制作函数依赖包推荐在Huawei Cloud EulerOS 2.0环境中进行。**若所需依赖涉及操作系统相关的依赖包，使用其他操作系统环境打包时，可能因底层依赖库的差异而出现找不到动态链接库的问题。
 
#### 搭建EulerOS环境
推荐在EulerOS环境中制作函数依赖包，EulerOS是基于开源技术的企业级Linux操作系统软件，具备高安全性、高可扩展性、高性能等技术特性，能够满足客户IT基础设施和云计算服务等多业务场景需求。
此处推荐[Huawei Cloud EulerOS](https://support.huaweicloud.com/productdesc-hce/hce_01_0001.html)，可选择以下方法搭建环境：
- 在华为云购买一台EulerOS的ECS弹性云服务器，请参见[购买并登录Linux弹性云服务器](https://support.huaweicloud.com/qs-ecs/ecs_01_0103.html)。在基础配置环节选择公共镜像时，选择"Huawei Cloud EulerOS操作系统"和具体的镜像版本。
- 下载[EulerOS镜像](https://mirrors.huaweicloud.com/mirrorDetail/5ea14e19abfb3ecc27a7e240?mirrorName=euler&catalog=os)，在本地使用虚拟化软件搭建EulerOS系统的虚拟机。
 
#### 制作函数依赖包
以下为不同运行时函数制作依赖包示例。
- [为Node.js函数制作依赖包]
  制作依赖包前，请确认环境中已安装与函数运行时相匹配版本的Node.js。以Node.js 8.10安装MySQL依赖包为例，其他Node.js版本和依赖包制作过程相同。
  **请注意不要使用** **CNPM** **命令制作Node.js依赖包。**
  1. 执行如下命令，为Nodejs 8.10安装MySQL依赖包。 
     ```
     npm install mysql --save
     ```
     命令执行后，在当前目录下会生成一个node_modules文件夹。
     
     
  
  2. 使用以下命令打包node_modules文件夹生成ZIP包，即生成最终需要的依赖包。 
     ```
     zip -rq mysql-node8.10.zip node_modules
     ```
     
     
  
  
  如需同时封装多个依赖包，建议参考以下步骤操作：
  1. 新建一个package.json文件，在package.json中填入如下内容。 
     ```
     {
     "name": "test",                     //自定义依赖包名称
     "version": "1.0.0",                 //依赖包版本号
     "dependencies": {
     "redis": "~2.8.0",          
     "mysql": "~2.17.1"
     }
     }
     ```
     
     
  
  2. 在包含package.json文件的目录下，执行如下命令。 
     ```
     npm install --save
     ```
     
     
  
  3. 再将node_modules打包成zip，即可生成一个既包含MySQL也包含redis的依赖包。 
     ```
     zip -rq node8.10.zip node_modules
     ```
     
     
   
- [为Python函数制作依赖包]
  制作依赖包前，请确认环境中已安装与函数运行时相匹配版本的Python。
  以Python3.12安装PyMySQL依赖包为例，其他Python版本和依赖包制作过程相同。
  1. 执行以下命令，指定PyMySQL依赖包的安装路径为本地的/tmp/pymysql下。 
     ```
     pip install PyMySQL --root /tmp/pymysql
     ```
     
     
  
  2. 执行成功后，执行以下命令进入指定目录。 
     ```
     cd /tmp/pymysql/
     ```
     
     
  
  3. 进入子目录直到site-packages路径下（一般路径为lib/python3.12/site-packages/，若此路径下无安装的依赖文件，请使用**find** 命令找到并进入库文件所在路径），接下来执行以下命令压缩依赖文件。
     
     所生成的包即为最终需要的依赖包。
     ```
     zip -rq pymysql.zip *
     ```
     
     
  
  
  ![](https://support.huaweicloud.com/usermanual-functiongraph/public_sys-resources/note_3.0-zh-cn.png)
  如果需要安装存放在本地的wheel安装包，可执行以下命令：
  ```
  pip install piexif-1.1.0b0-py2.py3-none-any.whl --root /tmp/piexif   
  //安装包名称以piexif-1.1.0b0-py2.py3-none-any.whl为例，请以实际安装包名称为准
  ```
- [为PHP函数制作依赖包]
  制作依赖包前，请确认环境中已安装与函数运行时相匹配版本的PHP。以PHP 7.3通过composer安装protobuf3.19依赖包为例，默认环境中已经安装了composer，其他PHP版本和依赖包制作过程相同。
  1. 新建一个composer.json文件，在composer.json中填入以下内容。 
     ```
     {
         "require": {
             "google/protobuf": "^3.19"
         }
     }
     ```
     
     
  
  2. 执行如下命令。 
     ```
     Composer install
     ```
     命令执行后，当前目录下会生成一个vendor文件夹，文件夹中有autoload.php、composer和google三个文件夹。
     
     
  
  3. 使用以下命令生成zip包。 
     ```
     zip –rq vendor.zip vendor
     ```
     
     
  
  
  如需同时封装多个依赖包，在composer.json文件中指定需要的依赖，把生成的vendor文件整体打包成zip文件上传即可。
  ![](https://support.huaweicloud.com/usermanual-functiongraph/public_sys-resources/note_3.0-zh-cn.png)
  在PHP项目中，使用composer下载的第三方依赖，需通过require "./vendor/autoload.php" 进行加载。FunctionGraph默认将上传的ZIP包解压后的内容，置于与项目代码同一级别的目录下。
- [为Java函数制作依赖包]
  使用Java编译型语言开发函数时，依赖包需要在本地编译。如何为Java函数制作依赖包请参考[Java函数开发指南（使用IDEA工具普通Java项目）](https://support.huaweicloud.com/devg-functiongraph/functiongraph_devg_02_0002.html)。
- [为Go函数制作依赖包]
  使用Go编译型语言开发函数时，依赖包需要在本地编译。如何为Go函数制作依赖包请参考[Go函数开发](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0441.html#section3)。
- [为C#函数制作依赖包]
  使用C#编译型语言开发函数时，依赖包需要在本地编译。如何为C#函数制作依赖包请参考[C#函数开发](https://support.huaweicloud.com/devg-functiongraph/functiongraph_02_0450.html#section3)。
#### 相关文档
- 在本地完成依赖包制作后，请参考[为函数配置依赖包](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_2119.html)在函数工作流控制台进行函数依赖包的创建和配置。
- 除使用控制台外，函数工作流支持通过API的方式管理函数依赖包，详情请参见[函数依赖包API](https://support.huaweicloud.com/api-functiongraph/Dependencies.html)。
 
