Solución de problemas de instalación de paquetes de PyPI

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

En esta página, se explica cómo solucionar problemas de conflictos de dependencias cuando se instalan paquetes de PyPI personalizados.

El problema más común con los paquetes de PyPI que podrías encontrar en Cloud Composer son los conflictos de dependencias.

Cuando especificas un nuevo paquete de PyPI personalizado para instalar, este paquete o su versión puede causar conflictos de dependencias con otros paquetes de PyPI personalizados o paquetes preinstalados en tu entorno. En este caso, la operación de actualización del entorno falla con un error.

Errores de Cloud Build y compilación en el clúster

Si se produce un problema con los paquetes, recibirás el mensaje de error al respecto de dos maneras, según la forma en que se implemente tu entorno:

  • Cloud Build. Un mensaje de error y un vínculo al registro de Cloud Build Por ejemplo:

    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 ...
    
  • Compilaciones en el clúster: Un mensaje de error y la ubicación de los registros de compilación Por ejemplo:

    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.
    

Consulta el mensaje de error detallado

Cuando falla la instalación de un paquete, pip informa el mensaje de error detallado. Puedes encontrar este mensaje de error en los registros de compilación.

Cómo encontrar el error pip en los registros de Cloud Build

Puedes seguir el vínculo del mensaje de error de Cloud Build o ubicar los registros de compilación:

  1. Cómo ubicar los registros de compilación:

    1. En la Google Cloud consola, ve a la página Historial de compilaciones.

      Ir al historial de compilaciones

    2. Selecciona la compilación que falló para ver sus registros.

  2. En el registro de compilación, busca el mensaje de error de pip. Por ejemplo:

    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.
    

Cómo ubicar el error pip en los registros de compilación del clúster

  1. Cómo ubicar los registros de compilación:

    1. En la Google Cloud consola, ve a la página Entornos.

      Ir a Entornos

    2. Selecciona tu entorno.

    3. Abre la pestaña Registros.

    4. Selecciona Todos los registros > Registros de Composer > Compilaciones > Imagen de trabajador y programador.

    5. En la lista desplegable Gravedad, selecciona Información.

  2. En los registros que se muestran, haz lo siguiente:

    1. Busca el mensaje de error installer.sh. Por ejemplo:

      The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION
      fail' returned a non-zero code: 1
      
    2. Los mensajes de información anteriores tienen el error pip detallado. Por ejemplo:

      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.
      

Tiempos de espera durante la instalación de paquetes de Python

En versiones recientes, la utilidad pip cambió su comportamiento cuando intenta satisfacer las dependencias. Si no se pueden satisfacer las dependencias especificadas, pip revisa todas las versiones disponibles de un paquete.

Cuando instalas un paquete, sucede lo siguiente:

  1. Si el paquete ya está preinstalado en tu entorno y las dependencias de Python que especificas no requieren ningún cambio, el paquete permanecerá como está.

    Ejemplo: aiodebug==2.3.0 está instalado y especificas aiodebug o aiodebug>=2.

  2. Si el paquete aún no está instalado en tu entorno o no satisface las dependencias de Python que especificaste, pip intentará usar la versión más reciente que satisfaga las dependencias. Esta es la versión más reciente del paquete si no especificaste una, o la versión más reciente del paquete que satisface las restricciones especificadas.

    Ejemplo: Si especificas aiodebug, se instalará la versión más reciente (2.*.*). Si especificas aiodebug<2, se instalará 1.*.*.

    Si esta versión causa conflictos de dependencia con los paquetes preinstalados, pip analiza todas las versiones disponibles del paquete para intentar satisfacer la dependencia especificada. Cuando esto suceda, los siguientes mensajes se mostrarán en el registro de compilación:

    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 del cambio, pip falló con un conflicto de dependencia sin verificar otras versiones.

Revisar todas las versiones disponibles puede llevar una cantidad significativa de tiempo y provocar una baja de versión de los paquetes o un tiempo de espera durante la instalación del paquete de Python.

Los paquetes preinstalados en Cloud Composer se actualizan con regularidad a las versiones más recientes por motivos de seguridad. Por lo tanto, también puede ocurrir un tiempo de espera cuando actualizas un entorno a una versión posterior de Cloud Composer.

Soluciones posibles:

  • Actualiza las dependencias personalizadas de Python con regularidad.

  • Usa PythonVirtualenvOperator para aislar fragmentos de código que requieren paquetes en conflicto.

Conflictos con paquetes de PyPI preinstalados

Algunos conflictos de paquetes se producen entre los paquetes de PyPI personalizados que instalas y los paquetes preinstalados.

Puedes ver la lista completa de paquetes preinstalados para tu versión de Cloud Composer en la página Versiones de Cloud Composer.

Para resolver este problema, puedes hacer lo siguiente:

El servidor de metadatos no está disponible cuando se instalan paquetes de PyPI.

Si tu entorno usa un archivo pip.conf personalizado, es posible que tengas un problema cuando no se puedan instalar paquetes PyPI nuevos en tu entorno. En los registros de Cloud Build relacionados con el error de instalación del paquete, puedes ver el siguiente mensaje de advertencia:

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 se produce por un archivo pip.conf que no permite el acceso al índice de paquetes predeterminado en https://pypi.org/simple. Por ejemplo, si tu archivo pip.conf solo permite instalar paquetes desde un repositorio de Artifact Registry personalizado debido al parámetro index-url redefinido, no estará disponible la instalación de paquetes desde el índice de paquetes predeterminado.

Para resolver este problema, asegúrate de que el índice del paquete https://pypi.org/simple se agregue a tu archivo pip.conf. Por ejemplo, si el índice de paquetes principal se define en el parámetro index-url, agrega el índice https://pypi.org/simple en el parámetro extra-index-url.

¿Qué sigue?