Instalar dependências do Python (original) (raw)

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página descreve como instalar pacotes Python no seu ambiente do Cloud Composer.

Sobre os pacotes no Cloud Composer

Esta seção explica como os pacotes PyPI funcionam no Cloud Composer.

Pacotes PyPI pré-instalados e personalizados em imagens do Cloud Composer

As imagens do Cloud Composer contêm pacotes PyPI pré-instalados e personalizados.

Opções para gerenciar pacotes PyPI para ambientes do Cloud Composer

Opção Use se
Instalar do PyPI A maneira padrão de instalar pacotes no ambiente
Instalar de um repositório com um endereço IP público O pacote é hospedado em um repositório de pacotes diferente do PyPI. Este repositório tem um endereço IP público
Instalar de um repositório do Artifact Registry O pacote é hospedado em um repositório do Artifact Registry
Instalar de um repositório na rede do projeto Seu ambiente não tem acesso à Internet pública. O pacote é hospedado em um repositório de pacotes na rede do projeto.
Instalar como uma biblioteca local do Python O pacote não pode ser encontrado no PyPI, e a biblioteca não tem dependências externas, como dist-packages.
Instalar um plug-in O pacote oferece funcionalidades específicas de plug-ins, como modificar a interface da Web do Airflow.
PythonVirtualenvOperator Você não quer que o pacote seja instalado para todos os workers do Airflow ou que a dependência entre em conflito com pacotes pré-instalados. O pacote pode ser encontrado no PyPI e não tem dependências externas.
KubernetesPodOperator e Operadores do GKE Você precisar de dependências externas que não podem ser instaladas usando pip, como dist-packages, ou estão em um servidor pip interno. Essa opção requer mais configuração e manutenção. Considere isso apenas se outras opções não funcionarem.

Antes de começar

Conferir a lista de pacotes PyPI

É possível acessar a lista de pacotes do ambiente em vários formatos.

Conferir pacotes pré-instalados

Para conferir a lista de pacotes pré-instalados do seu ambiente, consulte a lista de pacotes da imagem do Cloud Composer do seu ambiente.

Ver todos os pacotes

Para conferir todos os pacotes (pré-instalados e personalizados) no seu ambiente:

gcloud

O comando da CLI gcloud a seguir retorna o resultado do comando python -m pip list para um worker do Airflow no seu ambiente. É possível usar o argumento --tree para receber o resultado do comando python -m pipdeptree --warn.

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

Substitua:

Conferir pacotes PyPI personalizados

Console

  1. No Google Cloud console, acesse a página Ambientes.
    Acessar "Ambientes"
  2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente é aberta.
  3. Acesse a guia Pacotes PyPI.

gcloud

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

Substitua:

Instalar pacotes personalizados em um ambiente do Cloud Composer

Esta seção descreve diferentes métodos para instalar pacotes personalizados no seu ambiente.

Instalar pacotes do PyPI

Um pacote pode ser instalado doÍndice de pacotes Python se não tiver dependências externas ou entrar em conflito com pacotes pré-instalados.

Para adicionar, atualizar ou excluir as dependências do Python no ambiente, faça o seguinte:

Console

  1. No Google Cloud console, acesse a página Ambientes.
    Acessar "Ambientes"
  2. Na lista de ambientes, clique no nome do seu ambiente. A página Detalhes do ambiente é aberta.
  3. Acesse a guia Pacotes PyPI.
  4. Clique em Editar.
  5. Clique em Adicionar pacote.
  6. Na seção Pacotes PyPI, especifique os nomes dos pacotes com especificadores de versão e extras opcionais.
    Exemplo:
    • scikit-learn
    • scipy, >=0.13.3
    • nltk, [machine_learning]
  7. Clique em Salvar.

gcloud

A CLI gcloud tem vários argumentos para trabalhar com pacotes PyPI personalizados:

Instalação de requisitos de um arquivo

O arquivo requirements.txt precisa ter cadaespecificador de requisito em uma linha separada.

Exemplo:

scipy>=0.13.3
scikit-learn
nltk[machine_learning]

Atualize seu ambiente e especifique o arquivo requirements.txt no argumento --update-pypi-packages-from-file.

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

Substitua:

Como instalar um pacote

Atualize o ambiente e especifique o pacote, a versão e os extras no argumento --update-pypi-package.

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

Substitua:

Exemplo:

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

Como remover pacotes

Atualize o ambiente e especifique os pacotes que você quer excluir no argumento --remove-pypi-packages:

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

Substitua:

Exemplo:

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

API

Crie uma solicitação de API environments.patch.

Nesta solicitação:

  1. No parâmetro updateMask, especifique a máscara:
    • Use a máscara config.softwareConfig.pypiPackages para substituir todos os pacotes existentes pelos pacotes especificados. Os pacotes que você não especificar serão excluídos.
    • Use config.softwareConfig.envVariables.PACKAGE_NAME para adicionar ou atualizar um pacote específico. Para adicionar ou atualizar vários pacotes, especifique várias máscaras com vírgulas.
  2. No corpo da solicitação, especifique pacotes e valores para versões e extras:
{  
  "config": {  
    "softwareConfig": {  
      "pypiPackages": {  
        "PACKAGE_NAME": "EXTRAS_AND_VERSION"  
      }  
    }  
  }  
}  

Substitua:

Exemplo:

// 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

O bloco pypi_packages no bloco software_config especifica pacotes.

resource "google_composer_environment" "example" {
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    software_config {

      pypi_packages = {
          PACKAGE_NAME = "EXTRAS_AND_VERSION"
      }

    }
  }
}

Substitua:

Exemplo:

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

  config {

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

Instalar pacotes de um repositório público

É possível instalar pacotes hospedados em outros repositórios que tenham um endereço IP público.

Os pacotes precisam ser configurados corretamente para que a ferramenta pip padrão possa instalá-los.

Para instalar de um repositório de pacotes com um endereço público:

  1. Crie um arquivo pip.conf e inclua as seguintes informações no arquivo, se aplicável:
    • URL do repositório (no parâmetro index-url)
    • Acessar as credenciais do repositório
    • Opções de instalação de pip não padrão
      Exemplo:
[global]  
index-url=https://example.com/  
  1. (Opcional) Em alguns casos, talvez você queira buscar pacotes de vários repositórios, como quando o repositório público contém alguns pacotes específicos que você quer instalar e todos os outros pacotes do PyPI:
    1. Configure um repositório virtual do Artifact Registry.
    2. Adicione a configuração para vários repositórios (incluindo o PyPI, se necessário) e defina a ordem em que o pip pesquisa os repositórios.
    3. Especifique o URL do repositório virtual no parâmetro index-url.
  2. Determine o URI do bucket do ambiente.
  3. Faça o upload do arquivo pip.conf para a pasta /config/pip/no bucket do ambiente.
  4. Instale pacotes usando um dos métodos disponíveis.

Instalar pacotes de um repositório do Artifact Registry

É possível armazenar pacotes em um repositório do Artifact Registryno projeto e configurar o ambiente para fazer a instalação.

Configurar funções e permissões:

  1. Verifique se a conta de serviço do Cloud Build tempermissões para ler do repositório do Artifact Registry.
  2. Conceda permissões adicionais para instalar pacotes dos repositórios do Artifact Registry à conta de serviço do seu ambiente, conforme descrito emControle de acesso.
  3. Se o ambiente tiver acesso restrito a outros serviços no seu projeto, por exemplo, se você usar o VPC Service Controls:
    1. Atribua permissões para acessar o repositório do Artifact Registry à conta de serviço do ambiente em vez da conta de serviço do Cloud Build.
    2. Verifique se a conectividade com o repositório do Artifact Registry está configurada no projeto.

Para instalar pacotes PyPI personalizados de um repositório do Artifact Registry:

  1. Crie um arquivo pip.confe inclua as seguintes informações, se aplicável:
    • URL do repositório do Artifact Registry (no parâmetro index-url)
    • Acessar as credenciais do repositório
    • Opções de instalação de pip não padrão
      Para um repositório do Artifact Registry, adicione /simple/ ao URL do repositório:
[global]  
index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/  
  1. (Opcional) Em alguns casos, convém buscar pacotes de vários repositórios, como quando o repositório do Artifact Registry contém alguns pacotes específicos que você quer instalar e quer instalar todos os outros pacotes do PyPI:
    1. Configure um repositório virtual do Artifact Registry.
    2. Adicione a configuração para vários repositórios (incluindo o PyPI, se necessário) e defina a ordem em que o pip pesquisa os repositórios.
    3. Especifique o URL do repositório virtual no parâmetro index-url.
  2. Faça o upload desse arquivo pip.conf para a pasta /config/pip/no bucket do ambiente. Por exemplo, gs://us-central1-example-bucket/config/pip/pip.conf.
  3. Instale pacotes usando um dos métodos disponíveis.

Instalar pacotes de um repositório particular

É possível hospedar um repositório particular na rede do projeto e configurar o ambiente para instalar pacotes do Python.

Configurar funções e permissões:

  1. Se você instalar pacotes PyPI personalizados de um repositório na rede do seu projeto e esse repositório não tiver um endereço IP público:
    1. Atribua permissões para acessar esse repositório à conta de serviço do ambiente.
    2. Verifique se a conectividade com esse repositório está configurada no projeto.
  2. Conceda permissões adicionais para instalar pacotes de repositórios privados à conta de serviço do ambiente, conforme descrito emControle de acesso.

Para instalar pacotes de um repositório particular hospedado na rede do seu projeto:

  1. Crie um arquivo pip.confe inclua as seguintes informações, se aplicável:
    • Endereço IP do repositório na rede do projeto
    • Acessar as credenciais do repositório
    • Opções de instalação de pip não padrão
      Exemplo:
[global]  
index-url=https://192.0.2.10/  
  1. (Opcional) Em alguns casos, talvez seja necessário buscar pacotes de vários repositórios, como quando o repositório particular contém alguns pacotes específicos que você quer instalar e todos os outros pacotes do PyPI:
    1. Configure um repositório virtual do Artifact Registry.
    2. Adicione a configuração para vários repositórios (incluindo o PyPI, se necessário) e defina a ordem em que o pip pesquisa os repositórios.
    3. Especifique o URL do repositório virtual no parâmetro index-url.
  2. Faça o upload do arquivo pip.conf para a pasta /config/pip/no bucket do ambiente. Por exemplo, gs://us-central1-example-bucket/config/pip/pip.conf.
  3. Instale pacotes usando um dos métodos disponíveis.

Instalar uma biblioteca local do Python

Para instalar uma biblioteca local ou interna do Python, faça o seguinte:

  1. Coloque as dependências em um subdiretório na pasta dags/ no bucket do seu ambiente. Para importar um módulo de um subdiretório, cada subdiretório no caminho do módulo precisa conter um arquivo de marcador de pacote __init__.py.
    No exemplo abaixo, a dependência écoin_module.py:
dags/  
  use_local_deps.py  # A DAG file.  
  dependencies/  
    __init__.py  
    coin_module.py  
  1. Importe a dependência do arquivo de definição do DAG.
    Exemplo:

Usar pacotes que dependem de bibliotecas de objetos compartilhados

Alguns pacotes PyPI dependem de bibliotecas no nível do sistema. Embora o Cloud Composer não seja compatível com as bibliotecas do sistema, é possível usar as seguintes opções:

Instalar pacotes em ambientes de IP privado

Dependendo de como você configura seu projeto, seu ambiente pode não ter acesso à Internet pública.

Ambiente de IP privado com acesso público à Internet

Se o ambiente de IP particular puder acessar a Internet pública, será possível instalar pacotes usando opções para ambientes de IP público:

Ambiente de IP privado sem acesso à Internet

Se o ambiente de IP particular não tiver acesso à Internet pública, é possível instalar pacotes de uma das seguintes maneiras:

Instalar em um ambiente de IP particular com restrições de local de recursos

Manter seu projeto de acordo com os requisitos de restrição de localização de recursos proíbe o uso de algumas ferramentas. Em particular, o Cloud Build não pode ser usado para a instalação de pacotes, impedindo o acesso direto a repositórios na Internet pública.

Para instalar dependências do Python nesse ambiente, siga as orientações para ambientes de IP particularessem acesso à Internet.

Instalar uma dependência do Python em um ambiente de IP particular em um perímetro do VPC Service Controls

Proteger seu projeto com umperímetro do VPC Service Controlsresulta em outras restrições de segurança. Em particular, o Cloud Build não pode ser usado para a instalação de pacotes, impedindo o acesso direto a repositórios na Internet pública.

Para instalar dependências do Python em um ambiente de IP particular dentro de um perímetro, siga as orientações para ambientes de IP particularessem acesso à Internet.

A seguir