您可以透過兩種方式,為以 Python 編寫的 Cloud Run 函式指定依附元件:使用 pip 套件管理員的 requirements.txt
檔案,或與您的函式一起封裝本機依附元件。
系統不支援使用 Pipfile/Pipfile.lock 標準指定依附元件。專案不應包含這些檔案。
函式架構是所有函式的必要依附元件。雖然 Cloud Run 會在建立函式時為您安裝,但我們建議您將其納入明確的依附元件。
透過 pip 指定依附元件
Python 中的依附元件是透過 pip 管理,並以稱為 requirements.txt
的中繼資料檔案表示。這個檔案必須與包含函式程式碼的 main.py
檔案位在同一目錄。
部署或重新部署函式時,Cloud Run 會使用 pip 下載並安裝 requirements.txt
檔案中宣告的最新版依附元件。requirements.txt
檔案中,一行代表一個套件,每行都包含套件名稱以及要求的版本。詳情請參閱 requirements.txt
參考資料。
為避免建構作業受到依附元件版本變更的影響,建議將依附元件套件固定在特定版本。
以下是 requirements.txt
檔案範例:
functions-framework requests==2.20.0 numpy
封裝本機依附元件
您也可以將依附元件與函式一起封裝及部署。如果無法透過 pip 套件管理員使用依附元件,或是 Cloud Run 環境的網際網路存取權受到限制,就很適合採用這種做法。
舉例來說,您可以採用如下的目錄結構:
myfunction/ ├── main.py └── localpackage/ ├── __init__.py └── script.py
然後使用下列 import
陳述式,照常從 localpackage
匯入程式碼。
# Code in main.py from localpackage import script
請注意,這個方法不會執行任何 setup.py
檔案。含有這些檔案的套件仍可進行組合,但可能無法在 Cloud Run functions 上正確執行。
已複製依附元件
複製的依附元件是指來源直接納入原始碼套件,並與您自己的程式碼一起重建的依附元件。使用 GOOGLE_VENDOR_PIP_DEPENDENCIES
建構環境變數建立複製的 pip 依附元件,並避免在部署期間安裝這些依附元件。
建立複製的依附元件
確認開發系統已安裝 python3。
在開發樹狀結構的根目錄中,於
requirements.txt
檔案中宣告應用程式依附元件。在
requirements.txt
檔案中,將functions-framework
分行列出,即可將 Functions Framework 宣告為必要條件。將函式的依附元件下載到本機目錄。具體步驟取決於依附元件是 Python wheel (*.whl) 檔案還是 tar 檔案 (*.tar.gz)。
如果依附元件是 Python Wheel (*.whl),請使用下列 pip 指令,將其下載至開發樹狀結構的根目錄:
python3 -m pip download -r requirements.txt --only-binary=:all: \ -d DIRECTORY \ --python-version PYTHON_RUNTIME_VERSION \ --platform manylinux2014_x86_64 \ --implementation cp
取代:
- DIRECTORY:要下載至的本機目錄名稱。
- PYTHON_RUNTIME_VERSION:用於相容性檢查的 Python 版本。例如 Python 3.11 的
311
。
這個版本必須符合其中一個支援的 Python 執行階段。
產生的目錄結構應如下所示:
myfunction/ ├── main.py └── requirements.txt └── DIRECTORY ├── dependency1.whl └── dependency2.whl
如果依附元件是 tar 檔案 (*.tar.gz):
如果依附元件是以 Python 編寫,請使用 pip 下載:
python3 -m pip download -r requirements.txt \ -d DIRECTORY
如果依附元件包含以 C 或 C++ 編寫的程式碼,您必須分別下載及編譯。
部署函式和複製的依附元件:
gcloud functions deploy FUNCTION_NAME \ --runtime PYTHON_RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
取代:
- FUNCTION_NAME:要部署的函式名稱。
- PYTHON_RUNTIME_NAME:其中一個支援的 Python 執行階段名稱,用於執行部署的函式,例如 python311。這必須與您在本機開發環境中使用的 Python 執行階段版本相同。
- DIRECTORY:包含所複製依附元件的目錄名稱。
如要進一步瞭解如何使用建構包,請參閱「使用建構包建構函式」。
使用私人依附元件
您可以從 Artifact Registry 或其他存放區使用私人依附元件。
Artifact Registry 中的私有依附元件
Artifact Registry Python 存放區可存放 Python 函式的私有依附元件。部署至 Cloud Run 時,建構程序會自動為 Cloud Build 服務帳戶產生 Artifact Registry 憑證。您只需要在 requirements.txt
中加入 Artifact Registry 網址,不必產生額外憑證。例如:
--index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
如果建構作業需要多個存放區,請使用 Artifact Registry 虛擬存放區,安全地控管 pip 搜尋存放區的順序。
其他存放區的私有依附元件
依附元件安裝在 Cloud Build 環境中,該環境無法提供 SSH 金鑰的存取權。如果套件託管在需要 SSH 型驗證的存放區內,則必須與專案的程式碼一起複製及上傳,如前一節所述。
在部署應用程式前,您可以搭配 -t DIRECTORY
標記使用 pip install
指令,將私人依附元件複製到本機目錄中,步驟如下:
將您的依附元件複製到本機目錄:
pip install -t DIRECTORY DEPENDENCY
在
DIRECTORY
目錄中新增一個空白的__init__.py
檔案,將其轉換成模組。從此模組匯入以使用您的依附元件:
import DIRECTORY.DEPENDENCY
預先安裝的套件
在部署期間,系統會自動一併安裝以下 Python 套件和您的函式。如果您要在函式程式碼中使用下列任一套件,建議您在 requirements.txt
檔案中加入下列版本:
Python 3.8 以上版本
Python 3.7
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
此外,Python 執行階段在執行環境中還包含多個系統套件。