Risoluzione dei problemi relativi all'installazione del pacchetto PyPI

Managed Airflow (terza generazione) | Managed Airflow (seconda generazione) | Managed Airflow (prima generazione legacy)

Questa pagina spiega come risolvere i conflitti di dipendenza durante l'installazione di pacchetti PyPI personalizzati.

Il problema più comune con i pacchetti PyPI che potresti riscontrare in Managed Airflow sono i conflitti di dipendenza.

Quando specifichi un nuovo pacchetto PyPI personalizzato da installare, questo pacchetto o la sua versione potrebbe causare conflitti di dipendenza con altri pacchetti PyPI personalizzati o pacchetti preinstallati nel tuo ambiente. In questo caso, l'operazione di aggiornamento dell'ambiente non va a buon fine e viene visualizzato un errore.

Errori di build in Cloud Build e nel cluster

Se si verifica un problema con i pacchetti, riceverai il messaggio di errore in due modi, a seconda della modalità di deployment dell'ambiente:

  • Cloud Build. Un messaggio di errore e un link al log di Cloud Build. Ad esempio:

    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 ...
    
  • Build nel cluster. Un messaggio di errore e la posizione dei log di build. Ad esempio:

    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.
    

Visualizzare il messaggio di errore dettagliato

Quando l'installazione di un pacchetto non va a buon fine, pip segnala il messaggio di errore dettagliato. Puoi trovare questo messaggio di errore nei log di build.

Individuare l'errore pip nei log di Cloud Build

Puoi seguire il link dal messaggio di errore di Cloud Build o individuare i log di build:

  1. Individua i log di build:

    1. Nella Google Cloud console, vai alla pagina Cronologia di build.

      Vai alla cronologia di build

    2. Seleziona la build non riuscita per visualizzare i relativi log.

  2. Nel log di build, trova il messaggio di errore di pip. Ad esempio:

    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.
    

Individuare l'errore pip nei log di build nel cluster

  1. Individua i log di build:

    1. Nella Google Cloud console, vai alla pagina Ambienti.

      Vai ad Ambienti

    2. Seleziona il tuo ambiente.

    3. Apri la scheda Log.

    4. Seleziona Tutti i log > Log di Composer > Build > Immagine del worker e dello scheduler.

    5. Nell'elenco a discesa Gravità, seleziona Informazioni.

  2. Nei log visualizzati:

    1. Individua il messaggio di errore installer.sh. Ad esempio:

      The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION
      fail' returned a non-zero code: 1
      
    2. I messaggi informativi precedenti contengono l'errore pip dettagliato. Ad esempio:

      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.
      

Timeout durante l'installazione del pacchetto Python

Nelle versioni recenti, l'utilità pip ha modificato il suo comportamento quando tenta di soddisfare le dipendenze. Se le dipendenze specificate non possono essere soddisfatte, pip esamina tutte le versioni disponibili di un pacchetto.

Quando installi un pacchetto:

  1. Se il pacchetto è già preinstallato nel tuo ambiente e le dipendenze Python che specifichi non richiedono modifiche, il pacchetto rimane invariato.

    Esempio: aiodebug==2.3.0 è installato e specifichi aiodebug o aiodebug>=2.

  2. Se il pacchetto non è già installato nel tuo ambiente o non soddisfa le dipendenze Python che specifichi, pip tenta di utilizzare la versione più recente che soddisfa le dipendenze. Si tratta della versione più recente del pacchetto se non hai specificato una versione o della versione più recente del pacchetto che soddisfa le limitazioni specificate.

    Esempio: se specifichi aiodebug, verrà installata la versione più recente (2.*.*). Se specifichi aiodebug<2, verrà installata la versione 1.*.*.

    Se questa versione causa conflitti di dipendenza con i pacchetti preinstallati, pip esamina tutte le versioni disponibili del pacchetto per cercare di soddisfare la dipendenza specificata. In questo caso, nel log di build saranno visibili i seguenti messaggi:

    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.
    

    Prima della modifica, pip non andava a buon fine a causa di un conflitto di dipendenza senza controllare altre versioni.

L'esame di tutte le versioni disponibili può richiedere una quantità di tempo significativa e comportare un downgrade dei pacchetti o un timeout durante l'installazione del pacchetto Python.

I pacchetti preinstallati in Managed Airflow vengono aggiornati regolarmente alle versioni più recenti per motivi di sicurezza. Pertanto, può verificarsi un timeout anche quando esegui l'upgrade di un ambiente a una versione successiva di Managed Airflow.

Possibili soluzioni:

  • Aggiorna regolarmente le dipendenze Python personalizzate.

  • Utilizza PythonVirtualenvOperator per isolare gli snippet di codice che richiedono pacchetti in conflitto.

Conflitti con i pacchetti PyPI preinstallati

Alcuni conflitti di pacchetti si verificano tra i pacchetti PyPI personalizzati che installi e i pacchetti preinstallati.

Puoi visualizzare l'elenco completo dei pacchetti preinstallati per la tua versione di Managed Airflow nella pagina Versioni di Managed Airflow.

Per risolvere il problema, puoi:

Server dei metadati non disponibile durante l'installazione dei pacchetti PyPI

Se il tuo ambiente utilizza un file personalizzato pip.conf, potresti riscontrare un problema quando non è possibile installare nuovi pacchetti PyPI in tuo ambiente. Nei log di Cloud Build relativi all'errore di installazione del pacchetto, puoi visualizzare il seguente messaggio di avviso:

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.

Questo problema è causato da un file pip.conf che non consente l'accesso all' indice dei pacchetti predefinito all'indirizzo https://pypi.org/simple. Ad esempio, se il file pip.conf consente solo l'installazione di pacchetti da un repository Artifact Registry personalizzato a causa del parametro index-url ridefinito, l'installazione di pacchetti dall'indice dei pacchetti predefinito non è disponibile.

Per risolvere il problema, assicurati che l'indice dei pacchetti https://pypi.org/simple sia aggiunto al file pip.conf. Ad esempio, se l'indice dei pacchetti principale è definito nel index-url parametro, aggiungi l'https://pypi.org/simple indice nel extra-index-url parametro.

Passaggi successivi