全部產品
Search
文件中心

Function Compute:使用WebIDE打包函數第三方依賴

更新時間:Jul 06, 2024

WebIDE支援終端的執行個體環境和線上Function Compute執行環境相同。基於WebIDE執行個體的終端可以完成和Function Compute運行環境無平台差異的第三方依賴打包。本文介紹Python、Node.js、PHP運行時和自訂運行時如何通過WebIDE終端打包函數的第三方依賴。

Python

Python運行時已經內建部分第三方庫。更多資訊,請參見Python內建模組。如果您需要安裝其他第三方庫,可以在終端預設的/code目錄執行以下命令。

pip install -t .  flask
# 或
pip install -t . -r requirements.txt

使用上述方式,您的代碼目錄可能會較混亂,在左側資源管理員地區不能快速找到入口函數檔案index.py。此時,您可以定義一個目錄,例如/python,然後將第三方依賴都安裝至此目錄。為了函數代碼能直接匯入對應依賴,還需要為函數增加環境變數PYTHONPATH=/code/python。執行的命令如下。

mkdir python
cd python
pip install -t . flask

如果您要安裝的第三方依賴包體積較大,每次部署函數代碼速度較慢,可以將自訂的目錄/python打包為層,然後讓函數去引用此層。最後刪除代碼目錄中的/python目錄。執行的命令如下。

# 1. 將python目錄發布成一個層
zip -ry python.zip python
s cli fc3 layer publish --layer-name myPythonLibLayer --code /code/python.zip --compatible-runtime python3.10,python3.9,python3.6,custom, custom.debian10 --region cn-hangzhou -a default
...
395da10bf789aa49dd035db01bab****#myPythonLibLayer#1

# 2. 更新函數,函數引用此層

# 3. 刪除python目錄, 給函數程式碼封裝瘦身
rm -rf python python.zip

# 4. 部署更新函數
說明

Python運行時建議您使用特定目錄/python,無需單獨設定環境變數PYTHONPATH=/opt/python,函數即可直接匯入第三方包。

關於建立和引用自訂層的更多資訊,請參見建立自訂層配置自訂層

Node.js

Node.js運行時已經內建部分第三方依賴庫。更多資訊,請參見Node.js內建模組。如果您需要安裝其他第三方庫,可以在終端預設的/code目錄執行以下命令。

# 已經存在package.json檔案
npm install

如果您要安裝的第三方依賴包體積較大,每次部署函數代碼速度較慢,可以自訂目錄/node_modules並將其打包為層,然後讓函數去引用此層。最後刪除代碼目錄中的/node_modules目錄。範例程式碼如下所示。

# 1. 將node_modules目錄發布成一個層
mkdir nodejs
mv node_modules ./nodejs
zip -ry nodejs.zip nodejs
s cli fc3 layer publish --layer-name myNodeLibLayer --code /code/nodejs.zip --compatible-runtime nodejs16,nodejs14,nodejs12,nodejs10,custom,custom.debian10 --region cn-hangzhou -a default
...
395da10bf789aa49dd035db01bab****#myNodeLibLayer#1

# 2. 更新函數,函數引用此層

# 3. 刪除node_modules目錄, 給函數程式碼封裝瘦身
rm -rf nodejs nodejs.zip

# 4. 部署更新函數

關於建立和引用自訂層的更多資訊,請參見建立自訂層配置自訂層

PHP

PHP運行時與Python運行時、Node.js運行時安裝第三方依賴包原理相同,不同的是,PHP運行時構建層的特定目錄為/opt/php。更多資訊,請參見各運行時支援添加的特定目錄

Custom Runtime

如果您使用自訂運行時,且使用的語言為Python、Node.js或者PHP,則打包第三方依賴的方法同理。

如果您使用自訂運行時,且使用的語言為主流編譯型語言,例如Java和Golang,則需使用WebIDE提供的SDK來完成編譯打包。