Resolução de problemas de instalação de pacotes do PyPI

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página explica como resolver problemas de conflitos de dependências ao instalar pacotes PyPI personalizados.

O problema mais comum com os pacotes PyPI que pode encontrar no Cloud Composer são conflitos de dependências.

Quando especifica um novo pacote PyPI personalizado para instalar, este pacote ou a respetiva versão podem causar conflitos de dependências com outros pacotes PyPI personalizados ou pacotes pré-instalados no seu ambiente. Neste caso, a operação de atualização do ambiente falha com um erro.

Erros de compilação no cluster e no Cloud Build

Se ocorrer um problema com os pacotes, recebe a mensagem de erro sobre o mesmo de duas formas, consoante a forma como o seu ambiente está implementado:

  • Cloud Build. Uma mensagem de erro e um link para o registo do Cloud Build. Por exemplo:

    UPDATE operation on this environment failed 25 minutes ago with the
    following error message:
    Failed to install PyPI packages.  Check the Cloud Build log at ...
    
  • Compilações no cluster. Uma mensagem de erro e a localização dos registos de compilação. Por exemplo:

    UPDATE operation on this environment failed 17 minutes ago with the
    following error message:
    Failed to install PyPI packages.  Check the in-cluster build logs for
    details. They can be found in the Environment logs under the build-log-*
    log name.
    

Ver a mensagem de erro detalhada

Quando a instalação de um pacote falha, o pip comunica a mensagem de erro detalhada. Pode encontrar esta mensagem de erro nos registos de compilação.

Localize o erro pip nos registos do Cloud Build

Pode seguir o link na mensagem de erro do Cloud Build ou localizar os registos de compilação:

  1. Localize os registos de compilação:

    1. Na Google Cloud consola, aceda à página Histórico de compilações.

      Aceda a Criar histórico

    2. Selecione a compilação com falha para ver os respetivos registos.

  2. No registo de compilação, encontre a mensagem de erro de pip. Por exemplo:

    ERROR: apache-airflow-backport-providers-google 2021.2.5 has requirement
    google-cloud-logging<3.0.0,>=2.1.1, but you'll have google-cloud-logging
    1.15.0 which is incompatible.
    

Localize o erro pip nos registos de compilação no cluster

  1. Localize os registos de compilação:

    1. Na Google Cloud consola, aceda à página Ambientes.

      Aceder a Ambientes

    2. Selecione o seu ambiente.

    3. Abra o separador Registos.

    4. Selecione Todos os registos > Registos do compositor > Compilações > Imagem do trabalhador e do agendador.

    5. Na lista pendente Gravidade, selecione Informações.

  2. Nos registos apresentados:

    1. Localize a mensagem de erro installer.sh. Por exemplo:

      The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION
      fail' returned a non-zero code: 1
      
    2. As mensagens de informações anteriores têm o erro pip detalhado. Por exemplo:

      apache-airflow-backport-providers-google 2021.2.5 has requirement
      google-cloud-logging<3.0.0,>=2.1.1, but you have
      google-cloud-logging 1.15.0.
      

Tempos limite durante a instalação do pacote Python

Nas versões recentes, o utilitário pip alterou o respetivo comportamento ao tentar satisfazer dependências. Se não for possível satisfazer as dependências especificadas, o pip passa por todas as versões disponíveis de um pacote.

Quando instala um pacote, ocorre o seguinte:

  1. Se o pacote já estiver pré-instalado no seu ambiente e as dependências do Python que especificar não exigirem alterações, o pacote permanece como está.

    Exemplo: aiodebug==2.3.0 está instalada e especifica aiodebug ou aiodebug>=2.

  2. Se o pacote ainda não estiver instalado no seu ambiente ou não satisfizer as dependências do Python que especificar, o pip tenta usar a versão mais recente que satisfaz as dependências. Esta é a versão mais recente do pacote se não tiver especificado uma versão, ou a versão mais recente do pacote que cumpre as restrições especificadas.

    Exemplo: se especificar aiodebug, é instalada a versão mais recente (2.*.*). Se especificar aiodebug<2, é instalada a versão 1.*.*.

    Se esta versão causar conflitos de dependência com pacotes pré-instalados, o gestor de pacotes pip analisa todas as versões disponíveis do pacote para tentar satisfazer a dependência especificada. Quando tal acontece, as seguintes mensagens ficam visíveis no registo de compilação:

    INFO: pip is looking at multiple versions of PYTHON_PACKAGE_NAME
    to determine which version is compatible with other requirements.
    This could take a while.
    

    Antes da alteração, a instalação do pip falhava com um conflito de dependência sem verificar outras versões.

A análise de todas as versões disponíveis pode demorar muito tempo e levar a uma atualização inferior dos pacotes ou a um limite de tempo durante a instalação do pacote Python.

Os pacotes pré-instalados no Cloud Composer são atualizados regularmente para as versões mais recentes por motivos de segurança. Por conseguinte, também pode ocorrer um limite de tempo quando atualiza um ambiente para uma versão posterior do Cloud Composer.

Possíveis soluções:

  • Atualize regularmente as dependências personalizadas do Python.

  • Use PythonVirtualenvOperator para isolar fragmentos de código que requerem pacotes em conflito.

Conflitos com pacotes PyPI pré-instalados

Alguns conflitos de pacotes ocorrem entre os pacotes PyPI personalizados que instala e os pacotes pré-instalados.

Pode ver a lista completa de pacotes pré-instalados para a sua versão do Cloud Composer na página Versões do Cloud Composer.

Para resolver este problema, pode:

Servidor de metadados indisponível ao instalar pacotes PyPI

Se o seu ambiente usar um ficheiro pip.conf personalizado, pode ter um problema quando não for possível instalar novos pacotes PyPI no seu ambiente. Nos registos do Cloud Build relacionados com o erro de instalação do pacote, pode ver a seguinte mensagem de aviso:

WARNING: Compute Engine Metadata server unavailable on attempt 3 of 3. Reason:
timed out
WARNING: Authentication failed using Compute Engine authentication due to
unavailable metadata server.

Este problema é causado por um ficheiro pip.conf que não permite o acesso ao índice de pacotes predefinido em https://pypi.org/simple. Por exemplo, se o ficheiro pip.conf permitir apenas a instalação de pacotes a partir de um repositório do Artifact Registry personalizado devido ao parâmetro index-url redefinido, a instalação de pacotes a partir do índice de pacotes predefinido não está disponível.

Para resolver este problema, certifique-se de que o https://pypi.org/simpleíndice do pacote é adicionado ao ficheiro pip.conf. Por exemplo, se o índice do pacote principal estiver definido no parâmetro index-url, adicione o índice https://pypi.org/simple no parâmetro extra-index-url.

O que se segue?