安裝 Python 依附元件 (original) (raw)

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁面說明如何為 Cloud Composer 環境安裝 Python 套件。

關於 Cloud Composer 中的套件

本節說明 PyPI 套件在 Cloud Composer 中的運作方式。

Cloud Composer 映像檔中的預先安裝和自訂 PyPI 套件

Cloud Composer 映像檔包含預先安裝和自訂的 PyPI 套件。

管理 Cloud Composer 環境 PyPI 套件的選項

選項 適用情況
從 PyPI 安裝 在環境中安裝套件的預設方式
從具有公開 IP 位址的存放區安裝 套件會託管在 PyPI 以外的套件存放區。這個存放區有公開 IP 位址
從 Artifact Registry 存放區安裝 套件託管在 Artifact Registry 存放區
從專案網路中的存放區安裝 您的環境無法存取公開網際網路。套件會託管在專案網路中的套件存放區中。
以本機 Python 程式庫形式安裝 PyPI 中找不到該套件,且程式庫沒有任何外部依附元件,例如 dist-packages。
安裝外掛程式 這個套件提供外掛程式專屬功能,例如修改 Airflow 網頁介面。
PythonVirtualenvOperator 您不想為所有 Airflow 工作站安裝此套件,或是該依附元件與預先安裝的套件相衝突。這個套件可在 PyPI 中找到,且沒有任何外部依附元件。
KubernetesPodOperatorGKE 作業員 您需要無法透過 pip 安裝的外部依附元件 (例如 dist-packages),或是您需要位在內部 pip 伺服器的外部依附元件。這個選項需要更多設定和維護。只有在其他選項都無法解決問題時,才考慮使用這個選項。

事前準備

查看 PyPI 套件清單

您可以透過多種格式取得環境的套件清單。

查看預先安裝的套件

如要查看環境的預先安裝套件清單,請參閱 環境的 Cloud Composer 映像檔套件清單。

查看所有套件

如要查看環境中的所有套件 (預先安裝和自訂套件),請按照下列步驟操作:

gcloud

下列 gcloud CLI 指令會針對您環境中的 Airflow worker 傳回 python -m pip list 指令的結果。您可以使用 --tree 引數取得 python -m pipdeptree --warn 指令的結果。

gcloud beta composer environments list-packages \
    ENVIRONMENT_NAME \
    --location LOCATION

取代:

查看自訂 PyPI 套件

主控台

  1. 前往 Google Cloud 控制台的「Environments」頁面。
    前往「環境」
  2. 在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
  3. 前往「PyPI 套件」分頁。

gcloud

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.softwareConfig.pypiPackages)"

取代:

在 Cloud Composer 環境中安裝自訂套件

本節說明在環境中安裝自訂套件的不同方法。

從 PyPI 安裝套件

如果套件沒有外部依附元件,或與預先安裝的套件發生衝突,則可以從 Python Package Index 安裝。

如何為環境新增、更新或刪除 Python 依附元件:

主控台

  1. 前往 Google Cloud 控制台的「Environments」頁面。
    前往「環境」
  2. 在環境清單中,按一下環境名稱。「環境詳細資料」頁面隨即開啟。
  3. 前往「PyPI 套件」分頁。
  4. 按一下 [編輯]
  5. 按一下「新增套件」。
  6. 在「PyPI 套件」部分,指定套件名稱,並加上選用的版本指定碼和額外項目。
    例如:
    • scikit-learn
    • scipy>=0.13.3
    • nltk[machine_learning]
  7. 按一下 [儲存]。

gcloud

gcloud CLI 有幾個引數可用於處理自訂 PyPI 套件:

從檔案安裝規定

requirements.txt 檔案必須將每個需求指定碼分行列出。

例如:

scipy>=0.13.3
scikit-learn
nltk[machine_learning]

更新環境,並在 --update-pypi-packages-from-file 引數中指定 requirements.txt 檔案。

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
     --update-pypi-packages-from-file requirements.txt

取代:

安裝一個套件

更新環境,並在 --update-pypi-package 引數中指定套件、版本和額外項目。

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
     --update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION

取代:

範例:

gcloud composer environments update example-environment \
    --location us-central1 \
    --update-pypi-package "scipy>=0.13.3"

移除套件

更新環境,並在 --remove-pypi-packages 引數中指定要刪除的套件:

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
     --remove-pypi-packages PACKAGE_NAMES

取代:

範例:

gcloud composer environments update example-environment \
    --location us-central1 \
    --remove-pypi-packages scipy,scikit-learn

API

建構 environments.patch API 要求。

在這個要求中:

  1. updateMask 參數中指定遮罩:
    • 使用 config.softwareConfig.pypiPackages 遮罩,將所有現有套件替換為指定的套件。系統會刪除未指定的套件。
    • 使用 config.softwareConfig.envVariables.PACKAGE_NAME 新增或更新特定套件。如要新增或更新多個套件,請使用半形逗號指定多個遮罩。
  2. 在要求主體中,指定版本和額外項目的套件和值:
{  
  "config": {  
    "softwareConfig": {  
      "pypiPackages": {  
        "PACKAGE_NAME": "EXTRAS_AND_VERSION"  
      }  
    }  
  }  
}  

取代:

範例:

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.pypiPackages.EXAMPLE_PACKAGE,
// config.softwareConfig.pypiPackages.ANOTHER_PACKAGE
{
  "config": {
    "softwareConfig": {
      "pypiPackages": {
        "EXAMPLE_PACKAGE": "",
        "ANOTHER_PACKAGE": ">=1.10.3"
      }
    }
  }
}

Terraform

software_config 區塊中的 pypi_packages 區塊會指定套件。

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    software_config {

      pypi_packages = {
          PACKAGE_NAME = "EXTRAS_AND_VERSION"
      }

    }
  }
}

取代:

範例:

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    software_config {
      pypi_packages = {
          scipy = ">=1.10.3"
          scikit-learn = ""
          nltk = "[machine_learning]"
      }
    }
  }
}

從公開存放區安裝套件

您可以安裝在其他具有公開 IP 位址的存放區中代管的套件。

套件必須正確設定,才能讓預設 pip 工具安裝。

如要從含有公開位址的套件存放區安裝:

  1. 建立 pip.conf 檔案,並在檔案中加入下列資訊 (如適用):
    • 存放區的網址 (在 index-url 參數中)
    • 存放區的存取憑證
    • 非預設 pip 安裝選項
      範例:
[global]  
index-url=https://example.com/  
  1. (選用) 在某些情況下,您可能會想要從多個存放區擷取套件,例如當公開存放區包含您要安裝的特定套件,而您想要從 PyPI 安裝所有其他套件時:
    1. 設定 Artifact Registry 虛擬存放區
    2. 新增多個存放區的設定 (包括 PyPI,如有需要),並定義 pip 搜尋存放區的順序。
    3. index-url 參數中指定虛擬存放區的網址。
  2. 判斷環境值區的 URI
  3. 上傳 pip.conf 檔案至環境值區的 /config/pip/ 資料夾。
  4. 使用其中一種可用方法安裝套件。

從 Artifact Registry 存放區安裝套件

您可以在專案中將套件儲存在 Artifact Registry 存放區,並設定環境以便從該存放區安裝。

設定角色和權限:

  1. 請確認 Cloud Build 服務帳戶具備讀取 Artifact Registry 存放區權限
  2. 授予額外權限,以便從 Artifact Registry 存放區安裝套件至環境的服務帳戶,詳情請參閱「存取控管」一節。
  3. 如果您的環境限制了對專案中其他服務的存取權 (例如,如果您使用 VPC Service Controls):
    1. 將存取 Artifact Registry 存放區的權限指派給環境的服務帳戶,而非 Cloud Build 服務帳戶。
    2. 請確認專案中已設定連線至 Artifact Registry 存放區的連線。

如何從 Artifact Registry 存放區安裝自訂 PyPI 套件:

  1. 建立 pip.conf 檔案,並在檔案中加入下列資訊 (如適用):
    • Artifact Registry 存放區的網址 (位於 index-url 參數中)
    • 存放區的存取憑證
    • 非預設 pip 安裝選項
      如果是 Artifact Registry 存放區,請在存放區網址中附加 /simple/
[global]  
index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/  
  1. (選用) 在某些情況下,您可能會想從多個存放區擷取套件,例如當您的 Artifact Registry 存放區包含您要安裝的特定套件,而您想從 PyPI 安裝所有其他套件時:
    1. 設定 Artifact Registry 虛擬存放區
    2. 新增多個存放區的設定 (包括 PyPI,如有需要),並定義 pip 搜尋存放區的順序。
    3. index-url 參數中指定虛擬存放區的網址。
  2. 上傳這個 pip.conf 檔案至環境值區的 /config/pip/ 資料夾。例如:gs://us-central1-example-bucket/config/pip/pip.conf
  3. 使用其中一種可用方法安裝套件。

從私人存放區安裝套件

您可以在專案網路中代管私人存放區,並設定環境,以便從該存放區安裝 Python 套件。

設定角色和權限:

  1. 如果您從專案網路中的存放區安裝自訂 PyPI 套件,而該存放區沒有公開 IP 位址:
    1. 將存取此存放區的權限指派給環境的服務帳戶。
    2. 請確認您的專案已設定存放區連線。
  2. 如「存取權控管」一節所述,授予服務帳戶額外權限,以便從私人存放區安裝套件。

如要從專案網路中代管的私人存放區安裝套件,請按照下列步驟操作:

  1. 建立 pip.conf 檔案,並在檔案中加入下列資訊 (如適用):
    • 專案網路中存放區的 IP 位址
    • 存放區的存取憑證
    • 非預設 pip 安裝選項
      範例:
[global]  
index-url=https://192.0.2.10/  
  1. (選用) 在某些情況下,您可能會想要從多個存放區擷取套件,例如私人存放區包含您要安裝的特定套件,而您想要從 PyPI 安裝所有其他套件:
    1. 設定 Artifact Registry 虛擬存放區
    2. 新增多個存放區的設定 (包括 PyPI,如有需要),並定義 pip 搜尋存放區的順序。
    3. index-url 參數中指定虛擬存放區的網址。
  2. (選用) 在 2.2.1 以上版本的 Cloud Composer 中,您可以使用自訂憑證,從私人存放區安裝套件。方法如下:
    1. 將憑證檔案上傳至環境值區的 /config/pip/ 資料夾。
    2. 在 pip.conf 中,請在 cert 參數中指定憑證檔案名稱。請勿變更 /etc/pip/ 資料夾。
      範例:
    [global]  
    cert =/etc/pip/example-certificate.pem  
  3. 上傳 pip.conf 檔案至環境值區的 /config/pip/ 資料夾。例如:gs://us-central1-example-bucket/config/pip/pip.conf
  4. 使用其中一種可用方法安裝套件。

安裝本機 Python 程式庫

如何安裝內部或本機 Python 程式庫:

  1. 將依附元件放在環境值區 dags/ 資料夾的子目錄中。如要從子目錄匯入模組,模組路徑中的每個子目錄都必須包含 __init__.py 套件標記檔案。
    在以下範例中,依附元件為 coin_module.py
dags/  
  use_local_deps.py  # A DAG file.  
  dependencies/  
    __init__.py  
    coin_module.py  
  1. 從 DAG 定義檔匯入依附元件。
    例如:

使用依賴共用物件程式庫的套件

某些 PyPI 套件會依附系統層級程式庫。雖然 Cloud Composer 不支援系統程式庫,但您可以使用下列選項:

在私人 IP 環境中安裝套件

視專案設定方式而定,環境可能無法存取公共網際網路。

可存取公開網際網路的私人 IP 環境

如果私人 IP 環境可存取公開網際網路,您可以使用公開 IP 環境的選項安裝套件:

沒有網際網路存取權的私人 IP 環境

如果您的私人 IP 環境無法存取公開網際網路,您可以使用下列任一方式安裝套件:

在資源位置限制下,將應用程式安裝到私人 IP 環境

請注意,如果專案符合「資源位置限制」規定,就無法使用某些工具。特別是,Cloud Build 無法用於套件安裝作業,因此無法直接存取公開網際網路上的存放區。

如要在這種環境中安裝 Python 依附元件,請按照沒有網際網路存取權的私人 IP 環境的相關指南操作。

在 VPC Service Controls 範圍內的私人 IP 環境中安裝 Python 依附元件

使用 VPC Service Controls 範圍保護專案會導致進一步的安全限制。特別是,Cloud Build 無法用於套件安裝作業,因此無法直接存取公開網際網路上的存放區。

如要為邊界內的私人 IP 環境安裝 Python 依附元件,請按照沒有網路存取權的私人 IP 環境指南操作。

後續步驟