Solucionar 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 conflictos de dependencias al instalar paquetes de PyPI personalizados.

El problema más habitual con los paquetes de PyPI que puedes encontrar en Cloud Composer son los conflictos de dependencias.

Cuando especifiques un nuevo paquete PyPI personalizado para instalar, este paquete o su versión pueden provocar conflictos de dependencias con otros paquetes PyPI personalizados o paquetes preinstalados en tu entorno. En este caso, la operación de actualización del entorno falla y se produce un error.

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

Si se produce un problema con los paquetes, recibirás el mensaje de error de dos formas, en función de cómo se haya implementado tu entorno:

  • Cloud Build. Un mensaje de error y un enlace 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 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.
    

Ver el mensaje de error detallado

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

Busca el error pip en los registros de Cloud Build

Puedes seguir el enlace del mensaje de error de Cloud Build o buscar los registros de compilación:

  1. Localiza 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 fallida 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.
    

Localizar el error pip en los registros de compilación en clúster

  1. Localiza 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 del compositor > 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 contienen 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 las versiones recientes, la utilidad pip ha cambiado su comportamiento al intentar satisfacer las dependencias. Si no se pueden cumplir las dependencias especificadas, pip pasa por todas las versiones disponibles de un paquete.

Cuando instalas un paquete, ocurre lo siguiente:

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

    Por ejemplo, aiodebug==2.3.0 está instalada y especificas aiodebug o aiodebug>=2.

  2. Si el paquete aún no está instalado en tu entorno o no cumple las dependencias de Python que especifiques, pip intentará usar la versión más reciente que cumpla las dependencias. Se trata de la versión más reciente del paquete si no has especificado ninguna versión o de la versión más reciente del paquete que cumple las restricciones especificadas.

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

    Si esta versión provoca conflictos de dependencias con paquetes preinstalados, pip revisa todas las versiones disponibles del paquete para intentar satisfacer la dependencia especificada. Cuando esto ocurra, se mostrarán los siguientes mensajes 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 fallaba con un conflicto de dependencias sin comprobar otras versiones.

Revisar todas las versiones disponibles puede llevar mucho tiempo y provocar que se rebaje la versión de los paquetes o que se agote el tiempo de espera durante la instalación del paquete de Python.

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

Posibles soluciones:

  • Actualiza periódicamente las dependencias de Python personalizadas.

  • Usa PythonVirtualenvOperator para aislar fragmentos de código que requieran paquetes conflictivos.

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 de tu versión de Cloud Composer en la página Versiones de Cloud Composer.

Para solucionar este problema, puedes hacer lo siguiente:

Servidor de metadatos no disponible al instalar paquetes de PyPI

Si tu entorno usa un archivo pip.conf personalizado, puede que tengas problemas 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 debe a un archivo pip.conf que no permite acceder al índice de paquetes predeterminado en https://pypi.org/simple. Por ejemplo, si tu archivo pip.conf solo permite instalar paquetes de un repositorio de Artifact Registry personalizado debido al parámetro index-url redefinido, no se podrán instalar paquetes del índice de paquetes predeterminado.

Para solucionar este problema, asegúrese de que el índice de paquetes https://pypi.org/simple se haya añadido a su archivo pip.conf. Por ejemplo, si el índice del paquete principal se define en el parámetro index-url, añada el índice https://pypi.org/simple en el parámetro extra-index-url.

Siguientes pasos