Como instalar dependências do Python

Nesta página, você aprende a instalar pacotes Python e se conectar ao ambiente do Cloud Composer usando alguns aplicativos comuns.

As dependências são instaladas com as dependências atuais do Python incluídas no ambiente de base.

Se o ambiente exigir um pacote específico, recomendamos que você instale o pacote explicitamente para evitar problemas devido a alterações de pacote nas versões de imagem do Cloud Composer. Não confie nos pacotes pré-instalados na versão do Cloud Composer em execução no seu ambiente.

Opções para gerenciar dependências

Se a dependência do Python não tiver dependências externas e não entrar em conflito com as do Cloud Composer, instale-as usando o Índice de pacotes do Python. Também é possível instalar uma dependência do Python do repositório de pacotes privado.

Para acessar outros requisitos, confira algumas opções.

Opção Use se…
Biblioteca local do Python A dependência do Python não for encontrada no índice de pacotes, e a biblioteca não tiver dependências externas, como "dist-packages".
Recurso de plug-ins Você quiser usar funcionalidades específicas de plug-ins, como modificar a interface da Web do Airflow.
PythonVirtualenvOperator A dependência do Python for encontrada no índice de pacotes e não tiver dependências externas. No entanto, você não quer que a dependência do Python seja instalada em todos os workers ou que ela entre em conflito com as dependências necessárias para o Cloud Composer.
KubernetesPodOperator

Você precisar de dependências externas que não podem ser instaladas usando o pip, como "dist-packages", ou estão em um servidor pip interno.

Essa opção exige configuração e manutenção extras. Ela costuma ser a melhor alternativa quando as outras opções não funcionam.

Antes de começar

  • Esta permissão é necessária para instalar pacotes do Python no ambiente do Cloud Composer: composer.environments.update. Para mais informações, consulte Controle de acesso do Cloud Composer.
  • Se o ambiente for protegido por um perímetro do VPC Service Controls, antes de instalar dependências PyPI, será necessário conceder identidades de usuário adicionais com acesso a serviços que o perímetro de serviço protege e ativar o suporte para um repositório PyPI particular.
  • Os requisitos precisam seguir o formato especificado no PEP-508. Nele, cada requisito é especificado em letras minúsculas e consiste no nome do pacote com especificadores de versão e atributos extras opcionais.
  • Quando você instala dependências personalizadas do Python usando a API, todos os processos do Cloud Composer são executados com dependências PyPI recém-instaladas.
  • As dependências PyPI personalizadas podem entrar em conflito com as exigidas pelo Airflow, gerando instabilidade.
  • Antes de fazer implantações na produção, recomendamos que você teste os pacotes PyPI localmente em um contêiner de worker do Airflow.

Como visualizar pacotes do Python instalados

Para ver os pacotes do Python instalados no ambiente:

  1. Conecte-se ao cluster do GKE do ambiente.
  2. Conecte-se a um pod. Para acessar pods no cluster do GKE, use comandos kubectl compatíveis com o namespace. Para visualizar todos os namespaces, use kubectl get pods --all-namespaces.
  3. Execute pip freeze.

Por exemplo:

gcloud container clusters get-credentials projects/composer-test-1/zones/us-central1-f/clusters/us-central1-1223232-gke --zone us-central1-f
Fetching cluster endpoint and auth data.
kubeconfig entry generated for us-central1-quickstart-f5da909c-gke.
~ (composer-test-1)$ kubectl exec -itn composer-1-7-2-airflow-1-9-0-0a9f265b airflow-worker-7858d4fb79-2dr9j -- /bin/bash
...
~ (composer-test-1)$ pip freeze

absl-py==0.7.1
adal==1.2.0
asn1crypto==0.24.0
astor==0.8.0
attrs==19.1.0
autopep8==1.4.4
...

Como instalar uma dependência do Python a partir do PyPI

A dependência do Python não pode ter dependências externas nem conflitos com as dependências do Cloud Composer para instalar dependências do Python a partir do índice de pacotes do Python.

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

Console

Determine o nome do pacote e os especificadores de versão, conforme mostrado:

  • "pi-python-client", "==1.1.post1"
  • "go-api-python-client", "==1.0.0.dev187"

Nos pacotes sem o especificador de versão, use uma string vazia como valor. Por exemplo, "glob2", " ".

Para acessar as dependências do Python de um ambiente, vá até a página Dependências do PyPI. Basta seguir estas etapas:

  1. Abra a página Ambientes no Console do Google Cloud Platform.

    Abrir a página "Ambientes"

  2. Clique no Nome do ambiente em que você quer instalar, atualizar ou excluir dependências do Python.

  3. Selecione a guia Dependências do PyPI.

  4. Clique no botão Editar.

  5. Para adicionar uma nova dependência, faça o seguinte:

    1. Clique no botão Adicionar dependência.

    2. Digite o nome e a versão da biblioteca nos campos respectivos.

  6. Para atualizar uma dependência atual, faça o seguinte:

    1. Selecione o campo Nome e/ou Versão da biblioteca que você quer atualizar.

    2. Insira um novo valor.

  7. Para excluir uma dependência, faça o seguinte:

    1. Passe o cursor do mouse sobre o nome da dependência que será excluída.

    2. Clique no ícone de lixeira exibido.

gcloud

Transmita um arquivo requirements.txt para a ferramenta de linha de comando gcloud. Formate o arquivo com cada especificador de requisito em uma linha separada.

Arquivo de amostra requirements.txt:

scipy>=0.13.3
scikit-learn
nltk[machine_learning]

Transmita o arquivo requirements.txt para o comando environments.set-python-dependencies para definir as dependências de instalação.

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

O comando termina quando a operação é concluída. Para não ficar esperando, use a sinalização --async.

Se a atualização falhar por conta de um conflito de dependências, o ambiente continuará sendo executado com as dependências atuais. Se a operação for concluída, será possível usar as dependências recém-instaladas do Python nos DAGs.

rest

Use o método projects.locations.environments.patch especificando config.softwareConfig.pypiPackages como o prefixo do parâmetro de consulta updateMask.

Como instalar uma dependência do Python a partir de um repositório privado

É possível instalar pacotes hospedados em repositórios de pacotes particulares disponíveis na Internet pública. Os pacotes precisam ser pacotes configurados corretamente que a ferramenta padrão pip possa instalar.

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

  1. Crie um arquivo pip.conf e inclua estas informações no arquivo, se aplicável:

    • Acessar as credenciais do repositório
    • Opções de instalação de pip não padrão

      Exemplo:

      [global]
      extra-index-url=https://my-example-private-repo.com/
      

  2. Faça o upload do arquivo pip.conf para o bucket do Cloud Storage do ambiente e coloque-o na pasta /config/pip/, por exemplo: gs://us-central1-b1-6efannnn-bucket/config/pip/pip.conf

Como instalar uma dependência do Python em um ambiente de IP privado

Um ambiente de IP privado restringe o acesso à Internet pública. Portanto, a instalação de dependências do Python pode exigir etapas adicionais.

Ao instalar dependências de um repositório PyPI público, nenhuma configuração especial é necessária. É possível seguir o processo normal descrito acima. Também é possível solicitar pacotes de um repositório particular com um endereço público.

Como alternativa, é possível hospedar um repositório PyPI particular na sua rede VPC. Ao instalar dependências, o Cloud Composer executará a operação no cluster de IP privado do GKE que hospeda seu ambiente, sem acessar nenhum endereço IP público por meio do Cloud Build.

Para instalar pacotes de um repositório particular hospedado na sua rede VPC:

  1. Se a conta de serviço do ambiente do Cloud Composer não tiver o papel project.editor, conceda a ela o papel iam.serviceAccountUser.

  2. Especifique o endereço IP particular do repositório no arquivo pip.conf enviado para a pasta /config/pip/ no bucket do Cloud Storage.

Como instalar uma dependência do Python em um ambiente de IP privado em um perímetro do VPC Service Controls

Proteger seu projeto com um perímetro do VPC Service Controls resulta 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 para um ambiente de IP privado do Composer no perímetro, você tem algumas opções:

  1. Use um repositório PyPI privado hospedado na sua rede VPC (conforme descrito na seção acima).
  2. Use um servidor proxy na rede VPC para se conectar a um repositório PyPI na Internet pública. Especifique o endereço de proxy no arquivo /config/pip/pip.conf no bucket do Cloud Storage.
  3. Se a política de segurança permitir acesso à rede VPC a partir de endereços IP externos, ative isso ao Cloud NAT.
  4. Insira as dependências do Python na pasta dags do bucket do Cloud Storage para instalá-las como bibliotecas locais. Essa pode não ser uma boa opção se a árvore de dependência for grande.

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

    Neste exemplo, a dependência é coin_module.py:

    dags/
      use_local_deps.py  # A DAG file.
      dependencies/
        __init__.py
        coin_module.py
    
  2. Importe a dependência do arquivo de definição do DAG.

    Por exemplo:

    from dependencies import coin_module

Como usar pacotes do Python 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:

  1. Use o KubernetesPodOperator. Defina a imagem do operador como uma imagem de compilação personalizada. Se você encontrar pacotes que falham durante a instalação devido a uma dependência do sistema não atendida, use essa opção.

  2. Faça o upload das bibliotecas de objetos compartilhados no bucket do Cloud Storage do ambiente.

    1. Encontre manualmente as bibliotecas de objetos compartilhados para a dependência de PyPI (um arquivo ".so").
    2. Faça o upload das bibliotecas de objetos compartilhados para /home/airflow/gcs/plugins.
    3. Defina esta variável de ambiente do Cloud Composer: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins

    Se os pacotes PyPI foram instalados com êxito, mas falham no ambiente de execução, essa é uma opção.

Como se conectar à interface da Web do Flower

O Flower é uma ferramenta baseada na Web para trabalhar com clusters do Celery. Ele vem pré-instalado no ambiente. É possível usar a IU da Web do Flower para monitorar os workers do Apache Airflow no ambiente.

Para acessar o Flower, faça o seguinte:

  1. Para determinar o cluster do Kubernetes Engine, visualize o ambiente:

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION

    O cluster está listado como gkeCluster. A zona em que o cluster é implantado aparece como location.

    Por exemplo:

          gcloud composer environments describe environment-name --location us-central1
          config:
            airflowUri: https://uNNNNe0aNNbcd3fff-tp.appspot.com
            dagGcsPrefix: gs://us-central1-may18-test-00a47695-bucket/dags
            gkeCluster: projects/example-project/zones/us-central1-a/clusters/us-central1-environment-name-00a47695-gke
            nodeConfig:
              diskSizeGb: 100
              location: projects/example-project/zones/us-central1-a

    No exemplo, o cluster é us-central1-environment-name-00a47695-gke e a zona é us-central1-a. Essas informações também estão disponíveis na página Detalhes do ambiente no Console do Cloud.

  2. Conecte-se ao cluster do Kubernetes Engine:

    gcloud container clusters get-credentials CLUSTER_NAME /
        --zone CLUSTER_ZONE

    Por exemplo:

    gcloud container clusters get-credentials us-central1-environment-name-00a47695-gke --zone us-central1-a
    
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for us-central1-environment-name-00a47695-gke.
  3. Visualize os pods do worker e selecione aquele em que o Flower será executado:

    kubectl get pods --all-namespaces | grep worker

    Exemplo:

    kubectl get pods --all-namespaces | grep worker
    
    airflow-worker-89696c45f-49rkb      2/2       Running   1          29d
    airflow-worker-89696c45f-gccmm      2/2       Running   1          29d
    airflow-worker-89696c45f-llnnx      2/2       Running   0          29d

    Os nomes do pod correspondem à regex "airflow-(worker|scheduler)-[-a-f0-9]+").

  4. Execute o Flower no pod do worker:

    kubectl exec -n NAMESPACE -it POD_NAME -c airflow-worker -- airflow flower

    Exemplo:

    kubectl exec -n composer-1-6-0-airflow-1-10-1-9670c487 -it airflow-worker-89696c45f-llnnx /
        -c airflow-worker -- airflow flower
    
    [I 180601 20:35:55 command:139] Visit me at http://0.0.0.0:5555
    [I 180601 20:35:55 command:144] Broker: redis://airflow-redis-service.default.svc.cluster.local:6379/0
  5. Em uma sessão de terminal separada, use kubectl para encaminhar uma porta da máquina local para o pod que executa a IU do Flower:

    kubectl -n NAMESPACE port-forward POD_NAME 5555

    Exemplo:

    kubectl -n composer-1-6-0-airflow-1-10-1-9670c487 port-forward airflow-worker-c5c4b58c7-zhmkv 5555
    
    Forwarding from 127.0.0.1:5555 -> 5555
  6. Para acessar a IU da Web, visite http://localhost:5555 no navegador local.

Como instalar o SQLAlchemy para acessar o banco de dados do Airflow

O SQLAlchemy é um mapeador objeto-relacional (ORM, na sigla em inglês) e kit de ferramentas SQL do Python. É possível instalá-lo e usá-lo para acessar a instância do Cloud SQL do Cloud Composer. Durante a instalação, o Cloud Composer configura a variável de ambiente AIRFLOW__CORE__SQL_ALCHEMY_CONN do Airflow.

Para instalar o SQLAlchemy, faça o seguinte:

  1. Instale sqlalchemy no ambiente.

    gcloud composer environments update ENVIRONMENT-NAME /
        --location LOCATION /
        --update-pypi-package "sqlalchemy"
    
  2. Para determinar o cluster do Kubernetes Engine, visualize o ambiente:

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION
  3. Conecte-se ao cluster do Kubernetes Engine:

    gcloud container clusters get-credentials CLUSTER_NAME /
        --zone CLUSTER_LOCATION
  4. Visualize os pods do worker e selecione aquele a que você se conectará:

    kubectl get pods --all-namespaces | grep worker
  5. Execute o SSH para o pod do worker:

    kubectl -n NAMESPACE exec -it POD_NAME -c airflow-worker -- /bin/bash

    Exemplo:

    kubectl -n composer-1-6-0-airflow-1-10-1-9670c487 /
        exec -it airflow-worker-54c6b57789-66pnr -c airflow-worker -- /bin/bash
    airflow@airflow-worker-54c6b57789-66pnr:~$

  6. Use a biblioteca sqlalchemy para interagir com o banco de dados do Airflow:

    python
    import airflow.configuration as config
    config.conf.get('core', 'sql_alchemy_conn')