Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Esta página describe cómo instalar paquetes de Python para su entorno de Cloud Composer.
Acerca de los paquetes en Cloud Composer
Esta sección explica cómo funcionan los paquetes PyPI en Cloud Composer.
Paquetes de PyPI preinstalados y personalizados en imágenes de Cloud Composer
Las imágenes de Cloud Composer contienen paquetes de PyPI preinstalados y personalizados.
Los paquetes de PyPI preinstalados se incluyen en la imagen de Cloud Composer de su entorno. Cada imagen de Cloud Composer contiene paquetes de PyPI específicos para su versión de Cloud Composer y Airflow.
Los paquetes de PyPI personalizados son paquetes que puede instalar en su entorno además de los paquetes preinstalados.
Opciones para administrar paquetes de PyPI para entornos de Cloud Composer
Opción | Úselo si |
---|---|
Instalar desde PyPI | La forma predeterminada de instalar paquetes en su entorno |
Instalar desde un repositorio con una dirección IP pública | El paquete está alojado en un repositorio de paquetes distinto de PyPI. Este repositorio tiene una dirección IP pública. |
Instalar desde un repositorio de Artifact Registry | El paquete está alojado en un repositorio de Artifact Registry |
Instalar desde un repositorio en la red de su proyecto | Su entorno no tiene acceso a internet público. El paquete está alojado en un repositorio de paquetes en la red de su proyecto. |
Instalar como una biblioteca local de Python | El paquete no se puede encontrar en PyPI y la biblioteca no tiene ninguna dependencia externa, como dist-packages . |
Instalar un complemento | El paquete proporciona funcionalidad específica del complemento, como modificar la interfaz web de Airflow. |
Operador virtual Python | No desea que el paquete se instale para todos los trabajadores de Airflow, ya que la dependencia entra en conflicto con los paquetes preinstalados. El paquete se encuentra en PyPI y no tiene dependencias externas. |
KubernetesPodOperator y operadores de GKE | Necesita dependencias externas que no se pueden instalar desde pip , como dist-packages , o que están en un servidor pip interno. Esta opción requiere más configuración y mantenimiento. Considérela solo si las otras opciones no funcionan. |
Antes de empezar
Debe tener un rol que pueda activar operaciones de actualización del entorno. Además, la cuenta de servicio del entorno debe tener un rol con permisos suficientes para realizar operaciones de actualización.
Si su entorno está protegido por un perímetro de controles de servicio de VPC, antes de instalar las dependencias de PyPI debe otorgar identidades de usuario adicionales con acceso a los servicios que protege el perímetro de servicio y habilitar el soporte para un repositorio privado de PyPI.
Los requisitos deben seguir el formato especificado en PEP-508, donde cada requisito se especifica en minúsculas y consta del nombre del paquete con extras opcionales y especificadores de versión.
Si un conflicto de dependencias provoca un error en la actualización, su entorno continúa ejecutándose con sus dependencias existentes. Si la operación se realiza correctamente, puede empezar a usar las dependencias de Python recién instaladas en sus DAG.
PythonVirtualenvOperator no utiliza la configuración del archivo
pip.conf
de su entorno. Si desea usar dependencias específicas, incluyendo su instalación desde un índice personalizado, pase los requisitos en el parámetrorequirements
como una lista de cadenas. Para obtener más información sobre el formato, consulte "Formato del archivo de requisitos" en la documentación de pip.
Ver la lista de paquetes de PyPI
Puede obtener la lista de paquetes para su entorno en varios formatos.
Ver paquetes preinstalados
Para ver la lista de paquetes preinstalados para su entorno, consulte la lista de paquetes de la imagen de Cloud Composer de su entorno .
Ver todos los paquetes
Para ver todos los paquetes (tanto preinstalados como personalizados) en su entorno:
nube g
El siguiente comando CLI de gcloud devuelve el resultado del comando python -m pip list
para un trabajador de Airflow en su entorno. Puede usar el argumento --tree
para obtener el resultado del comando python -m pipdeptree --warn
.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
Reemplazar:
-
ENVIRONMENT_NAME
con el nombre del entorno. -
LOCATION
con la región donde se ubica el entorno.
Ver paquetes personalizados de PyPI
Consola
En Google Cloud consola, vaya a la página Entornos .
En la lista de entornos, haga clic en el nombre del suyo. Se abrirá la página de detalles del entorno .
Vaya a la pestaña Paquetes de PyPI .
nube g
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
Reemplazar:
-
ENVIRONMENT_NAME
con el nombre del entorno. -
LOCATION
con la región donde se ubica el entorno.
Instalar paquetes personalizados en un entorno de Cloud Composer
Esta sección describe diferentes métodos para instalar paquetes personalizados en su entorno.
Instalar paquetes desde PyPI
Se puede instalar un paquete desde el índice de paquetes de Python si no tiene dependencias externas ni conflictos con paquetes preinstalados.
Para agregar, actualizar o eliminar las dependencias de Python para su entorno:
Consola
En Google Cloud consola, vaya a la página Entornos .
En la lista de entornos, haga clic en el nombre del suyo. Se abrirá la página de detalles del entorno .
Vaya a la pestaña de paquetes de PyPI .
Haga clic en Editar
Haga clic en Agregar paquete .
En la sección de paquetes de PyPI , especifique los nombres de los paquetes, con especificadores de versión y extras opcionales.
Por ejemplo:
-
scikit-learn
-
scipy
,>=0.13.3
-
nltk
,[machine_learning]
-
Haga clic en Guardar .
nube g
gcloud CLI tiene varios argumentos para trabajar con paquetes PyPI personalizados:
-
--update-pypi-packages-from-file
reemplaza todos los paquetes personalizados de PyPI existentes con los paquetes especificados. Los paquetes que no especifique se eliminarán. -
--update-pypi-package
actualiza o instala un paquete. -
--remove-pypi-packages
elimina los paquetes especificados. -
--clear-pypi-packages
elimina todos los paquetes.
Requisitos de instalación desde un archivo
El archivo requirements.txt
debe tener cada especificador de requisito en una línea separada.
Por ejemplo:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Actualice su entorno y especifique el archivo requirements.txt
en el argumento --update-pypi-packages-from-file
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
Reemplazar:
-
ENVIRONMENT_NAME
con el nombre del entorno. -
LOCATION
con la región donde se ubica el entorno.
Instalación de un paquete
Actualice su entorno y especifique el paquete, la versión y los extras en el argumento --update-pypi-package
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
Reemplazar:
-
ENVIRONMENT_NAME
con el nombre del entorno. -
LOCATION
con la región donde se ubica el entorno. -
PACKAGE_NAME
con el nombre del paquete. -
EXTRAS_AND_VERSION
con el especificador opcional de versión y extras. Para omitir versiones y extras, especifique un valor vacío.
Ejemplo:
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
Eliminando paquetes
Actualice su entorno y especifique los paquetes que desea eliminar en el argumento --remove-pypi-packages
:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
Reemplazar:
-
ENVIRONMENT_NAME
con el nombre del entorno. -
LOCATION
con la región donde se ubica el entorno. -
PACKAGE_NAMES
con una lista de paquetes separados por comas.
Ejemplo:
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
Construya una solicitud API environments.patch
.
En esta solicitud:
En el parámetro
updateMask
, especifique la máscara:- Use la máscara
config.softwareConfig.pypiPackages
para reemplazar todos los paquetes existentes con los especificados. Los paquetes que no especifique se eliminarán. - Utilice
config.softwareConfig.envVariables.PACKAGE_NAME
para agregar o actualizar un paquete específico. Para agregar o actualizar varios paquetes, especifique varias máscaras con comas.
- Use la máscara
En el cuerpo de la solicitud, especifique los paquetes y valores para las versiones y los extras:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }
Reemplazar:
-
PACKAGE_NAME
con el nombre del paquete. -
EXTRAS_AND_VERSION
con el especificador opcional de versión y extras. Para omitir versiones y extras, especifique un valor vacío. - Para agregar más de un paquete, agregue entradas adicionales para paquetes a
pypiPackages
.
-
Ejemplo:
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.pypiPackages.EXAMPLE_PACKAGE,
// config.softwareConfig.pypiPackages.ANOTHER_PACKAGE
{
"config": {
"softwareConfig": {
"pypiPackages": {
"EXAMPLE_PACKAGE": "",
"ANOTHER_PACKAGE": ">=1.10.3"
}
}
}
}
Terraformar
El bloque pypi_packages
en el bloque software_config
especifica paquetes.
resource "google_composer_environment" "example" {
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
Reemplazar:
-
ENVIRONMENT_NAME
con el nombre del entorno. -
LOCATION
con la región donde se ubica el entorno. -
PACKAGE_NAME
con el nombre del paquete. -
EXTRAS_AND_VERSION
con el especificador opcional de versión y extras. Para omitir versiones y extras, especifique un valor vacío. - Para agregar más de un paquete, agregue entradas adicionales para paquetes a
pypi_packages
.
Ejemplo:
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
Instalar paquetes desde un repositorio público
Puede instalar paquetes alojados en otros repositorios que tengan una dirección IP pública.
Los paquetes deben estar configurados correctamente para que la herramienta pip
predeterminada pueda instalarlos.
Para instalar desde un repositorio de paquetes que tenga una dirección pública:
Cree un archivo pip.conf e incluya la siguiente información en el archivo, si corresponde:
- URL del repositorio (en el parámetro
index-url
) - Credenciales de acceso al repositorio
- Opciones de instalación
pip
no predeterminadas
Ejemplo:
[global] index-url=https://example.com/
- URL del repositorio (en el parámetro
(Opcional) En algunos casos, es posible que desee obtener paquetes de varios repositorios, como cuando el repositorio público contiene algunos paquetes específicos que desea instalar y desea instalar todos los demás paquetes desde PyPI:
- Configurar un repositorio virtual de Artifact Registry .
- Agregue la configuración para múltiples repositorios (incluido PyPI, si es necesario) y defina el orden en que
pip
busca en los repositorios. - Especifique la URL del repositorio virtual en el parámetro
index-url
.
Sube el archivo pip.conf a la carpeta
/config/pip/
en el depósito de tu entorno.Instale paquetes utilizando uno de los métodos disponibles .
Instalar paquetes desde un repositorio de Artifact Registry
Puede almacenar paquetes en un repositorio de Artifact Registry en su proyecto y configurar su entorno para instalar desde allí.
Configurar roles y permisos:
Asegúrese de que la cuenta de servicio Cloud Build tenga permisos para leer desde su repositorio Artifact Registry .
Si su entorno tiene acceso restringido a otros servicios en su proyecto, por ejemplo, si usa controles de servicio de VPC:
Asigne permisos para acceder a su repositorio de Artifact Registry a la cuenta de servicio del entorno en lugar de a la cuenta de servicio de Cloud Build.
Asegúrese de que la conectividad con el repositorio Artifact Registry esté configurada en su proyecto.
Para instalar paquetes de PyPI personalizados desde un repositorio de Artifact Registry:
Cree un archivo pip.conf e incluya la siguiente información en el archivo, si corresponde:
- URL del repositorio de Artifact Registry (en el parámetro
index-url
) - Credenciales de acceso al repositorio
- Opciones de instalación
pip
no predeterminadas
Para un repositorio de Artifact Registry, agregue
/simple/
a la URL del repositorio:[global] index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
- URL del repositorio de Artifact Registry (en el parámetro
(Opcional) En algunos casos, es posible que desee obtener paquetes de varios repositorios, como cuando su repositorio de Artifact Registry contiene algunos paquetes específicos que desea instalar y desea instalar todos los demás paquetes desde PyPI:
- Configurar un repositorio virtual de Artifact Registry .
- Agregue la configuración para múltiples repositorios (incluido PyPI, si es necesario) y defina el orden en que
pip
busca en los repositorios. - Especifique la URL del repositorio virtual en el parámetro
index-url
.
Sube este archivo pip.conf a la carpeta
/config/pip/
del bucket de tu entorno. Por ejemplo:gs://us-central1-example-bucket/config/pip/pip.conf
.Instale paquetes utilizando uno de los métodos disponibles .
Instalar paquetes desde un repositorio privado
Puedes alojar un repositorio privado en la red de tu proyecto y configurar tu entorno para instalar paquetes de Python desde él.
Configurar roles y permisos:
Si instala paquetes de PyPI personalizados desde un repositorio en la red de su proyecto y este repositorio no tiene una dirección IP pública:
Asignar permisos para acceder a este repositorio a la cuenta de servicio del entorno.
Asegúrese de que la conectividad a este repositorio esté configurada en su proyecto.
Para instalar paquetes desde un repositorio privado alojado en la red de su proyecto:
Cree un archivo pip.conf e incluya la siguiente información en el archivo, si corresponde:
- Dirección IP del repositorio en la red de su proyecto
- Credenciales de acceso al repositorio
- Opciones de instalación
pip
no predeterminadas
Ejemplo:
[global] index-url=https://192.0.2.10/
(Opcional) En algunos casos, es posible que desee obtener paquetes de varios repositorios, como cuando el repositorio privado contiene algunos paquetes específicos que desea instalar y desea instalar todos los demás paquetes desde PyPI:
- Configurar un repositorio virtual de Artifact Registry .
- Agregue la configuración para múltiples repositorios (incluido PyPI, si es necesario) y defina el orden en que
pip
busca en los repositorios. - Especifique la URL del repositorio virtual en el parámetro
index-url
.
(Opcional) Puede usar un certificado personalizado al instalar paquetes desde su repositorio privado. Para ello:
Cargue el archivo de certificado en la carpeta
/config/pip/
en el depósito de su entorno.En pip.conf, especifique el nombre del archivo del certificado en el parámetro
cert
. No modifique la carpeta/etc/pip/
.Ejemplo:
[global] cert =/etc/pip/example-certificate.pem
Sube el archivo pip.conf a la carpeta
/config/pip/
del bucket de tu entorno. Por ejemplo:gs://us-central1-example-bucket/config/pip/pip.conf
.Instale paquetes utilizando uno de los métodos disponibles .
Instalar una biblioteca local de Python
Para instalar una biblioteca de Python interna o local:
Coloque las dependencias en un subdirectorio de la carpeta
dags/
del contenedor de su entorno. Para importar un módulo desde un subdirectorio, cada subdirectorio en la ruta del módulo debe contener un archivo de marcador de paquete__init__.py
.En el siguiente ejemplo, la dependencia es
coin_module.py
:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.py
Importe la dependencia del archivo de definición DAG.
Por ejemplo:
Utilice paquetes que dependan de bibliotecas de objetos compartidos
Algunos paquetes de PyPI dependen de bibliotecas de sistema. Aunque Cloud Composer no es compatible con las bibliotecas de sistema, puede usar las siguientes opciones:
Use KubernetesPodOperator . Configure la imagen del operador como una imagen de compilación personalizada. Si experimenta errores en los paquetes durante la instalación debido a una dependencia del sistema no satisfecha, use esta opción.
Sube las bibliotecas de objetos compartidos al contenedor de tu entorno. Si tus paquetes de PyPI se instalaron correctamente, pero fallan durante la ejecución, usa esta opción.
- Busque manualmente las bibliotecas de objetos compartidos para la dependencia de PyPI (un archivo .so).
- Cargue las bibliotecas de objetos compartidos en la carpeta
/plugins
en el depósito de su entorno. - Establezca la siguiente variable de entorno :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Instalar paquetes en entornos de IP privada
Dependiendo de cómo configure su proyecto, es posible que su entorno no tenga acceso a Internet público.
De forma predeterminada, su entorno de Cloud Composer 3 puede acceder a internet al instalar paquetes de PyPI . Esto funciona en todos los tipos de red del entorno (IP privada y pública). Por ejemplo, puede instalar paquetes del índice de paquetes de Python en un entorno con IP privada.
Para obtener más información, consulte Configurar el acceso a Internet al instalar paquetes de PyPI .
Entorno de IP privada con acceso público a Internet
Si su entorno de IP privada puede acceder a Internet público, puede instalar paquetes utilizando las opciones para entornos de IP pública:
- Instalar desde PyPI. En este caso, no se requiere ninguna configuración especial. Siga el procedimiento descrito en Instalar un paquete desde PyPI .
- Instalar desde un repositorio con una dirección IP pública. Siga el procedimiento descrito en Instalar un paquete desde un repositorio privado .
- Instalar desde un repositorio privado de PyPI alojado en la red de su proyecto.
Entorno de IP privada sin acceso a Internet
Si su entorno de IP privada no tiene acceso a Internet público, puede instalar paquetes utilizando una de las siguientes maneras:
- Utilice un repositorio privado de PyPI alojado en la red de su proyecto.
- Use una máquina virtual de servidor proxy en la red de su proyecto para conectarse a un repositorio de PyPI en la red pública de internet. Especifique la dirección del proxy en el archivo
/config/pip/pip.conf
del bucket de su entorno. - Utilice un repositorio del Registro de Artefactos como única fuente de paquetes. Para ello, redefina el parámetro
index-url
, como se describe. - Si su política de seguridad permite el acceso a direcciones IP externas desde su red VPC, puede habilitar la instalación de paquetes desde repositorios en Internet público configurando Cloud NAT .
- Coloque las dependencias de Python en la carpeta
/dags
del contenedor de su entorno para instalarlas como bibliotecas locales . Esto podría no ser recomendable si el árbol de dependencias es grande.
Instalar en un entorno de IP privada con restricciones de ubicación de recursos
Mantener su proyecto en línea con los requisitos de Restricción de Ubicación de Recursos prohíbe el uso de algunas herramientas. En particular, Cloud Build no puede usarse para la instalación de paquetes, lo que impide el acceso directo a repositorios en la red pública de internet.
Para instalar dependencias de Python en dicho entorno, siga las instrucciones para entornos de IP privada sin acceso a Internet .
Instalar una dependencia de Python en un entorno de IP privada en un perímetro de controles de servicio de VPC
Proteger su proyecto con un perímetro de Controles de Servicio de VPC implica restricciones de seguridad adicionales. En particular, Cloud Build no puede utilizarse para la instalación de paquetes, lo que impide el acceso directo a los repositorios en la red pública de internet.
Para instalar dependencias de Python para un entorno de IP privada dentro de un perímetro, siga las instrucciones para entornos de IP privada sin acceso a Internet .