在 Python (第 1 代) 中指定依附元件
您可以透過兩種方式,為以 Python 編寫的 Cloud Run 函式指定依附元件:使用 pip 套件管理員的 requirements.txt
檔案,或與您的函式一起封裝本機依附元件。
系統不支援使用 Pipfile/Pipfile.lock 標準指定依附元件。專案不應包含這些檔案。
透過 pip 指定依附元件
Python 中的依附元件是透過 pip 管理,並以稱為 requirements.txt
的中繼資料檔案表示。這個檔案必須與包含函式程式碼的 main.py
檔案位在同一目錄。
部署或重新部署函式時,Cloud Run functions 會使用 pip 下載並安裝 requirements.txt
檔案中宣告的最新版依附元件。requirements.txt
檔案中,一行代表一個套件,每行都包含套件名稱以及要求的版本。詳情請參閱 requirements.txt
參考資料。
為避免建構作業受到依附元件版本變更的影響,建議將依附元件套件固定在特定版本。
以下是 requirements.txt
檔案範例:
functions-framework requests==2.20.0 numpy
函式架構是所有函式的必要依附元件。雖然 Cloud Run functions 會在建立函式時代您安裝,但我們建議您將其納入明確的依附元件,以利清楚瞭解。
如果函式依附於私有依附元件,建議您將 functions-framework
鏡像到私有登錄檔。將鏡像 functions-framework
做為函式的依附元件,避免從公開網際網路安裝套件。
封裝本機依附元件
您也可以將依附元件與函式一起封裝及部署。如果無法透過 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:要部署的 Cloud Run functions 函式名稱
- :其中一個 支援的 Python 執行階段名稱,用於執行部署的函式,例如 python311。PYTHON_RUNTIME_NAME這必須與您在本機開發環境中使用的 Python 執行階段版本相同。
- DIRECTORY:包含供應商依附元件的目錄名稱
如要進一步瞭解如何使用建構包,請參閱「使用建構包建構函式」。
使用私人依附元件
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.7
Python 3.8 以上版本
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
此外,Python 執行階段在執行環境中還包含多個系統套件。如果函式使用的依附元件需要未列出的系統套件,您可以要求套件。