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:
Localiza los registros de compilación:
En la Google Cloud consola, ve a la página Historial de compilaciones.
Selecciona la compilación fallida para ver sus registros.
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
Localiza los registros de compilación:
En la Google Cloud consola, ve a la página Entornos.
Selecciona tu entorno.
Abre la pestaña Registros.
Selecciona Todos los registros > Registros del compositor > Compilaciones > Imagen de trabajador y programador.
En la lista desplegable Gravedad, selecciona Información.
En los registros que se muestran, haz lo siguiente:
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
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:
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 especificasaiodebug
oaiodebug>=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 especificasaiodebug<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:
Instala otra versión del paquete PyPI personalizado.
Instala una versión diferente del paquete preinstalado. Para ello, instala un paquete de PyPI personalizado con el nombre del paquete preinstalado y especifica la versión necesaria. No recomendamos que se instale una versión anterior de los paquetes preinstalados.
Comprueba si las versiones posteriores de Cloud Composer usan una versión diferente del paquete preinstalado. Puedes comprobar si hay posibles conflictos con paquetes de PyPI antes de actualizar tu entorno a una versión posterior de Cloud Composer.
Usa PythonVirtualenvOperator para aislar fragmentos de código que requieran paquetes conflictivos.
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
.