Administración de paquetes de Python 3 en Azure Automation

En este artículo se describe cómo importar, administrar y usar paquetes de Python 3 en Azure Automation que se ejecutan en el entorno de espacio aislado de Azure y Hybrid Runbook Worker. Los paquetes de Python deben descargarse en instancias de Hybrid Runbook Worker para la ejecución correcta del trabajo. Para simplificar los runbooks, puede usar paquetes de Python para importar los módulos que necesita.

Para obtener información sobre cómo administrar paquetes de Python 2, consulte Administración de paquetes de Python 2.

Paquetes de Python predeterminados

Para admitir runbooks de Python 3.8 en el servicio Automation, algunos paquetes de Python se instalan de manera predeterminada. Aquí hay una lista de estos paquetes. La versión predeterminada se puede invalidar si se importan los paquetes de Python en la cuenta de Automation.

Asimismo, se da preferencia a la versión importada en la cuenta de Automation. Para importar un solo paquete, consulte Importación de un paquete. Para importar un paquete con varios paquetes, consulte Importación de un paquete con dependencias.

Nota:

No hay paquetes predeterminados instalados para Python 3.10 (versión preliminar).

Paquetes como archivos de origen

Azure Automation solo admite un paquete de Python que solo contenga código de Python y no incluya otras extensiones de lenguaje ni código en otros lenguajes. Sin embargo, es posible que el entorno de espacio aislado de Azure no tenga los compiladores necesarios para los archivos binarios de C/C++, por lo que se recomienda usar en su lugar archivos wheel.

Nota:

Actualmente, Python 3.10 (versión preliminar) solo admite archivos wheel.

El Índice de paquetes de Python (PyPI) es un repositorio de software para el lenguaje de programación Python. Al seleccionar un paquete de Python 3 para importarlo a su cuenta de Automation desde PyPI, tenga en cuenta los siguientes elementos del nombre de archivo:

Seleccione una versión de Python:

Elemento de nombre de archivo Descripción
cp38 Automation admite Python 3.8 para trabajos en la nube.
amd64 Los procesos de espacio aislado de Azure tienen una arquitectura Windows de 64 bits.

Por ejemplo:

  • Para importar pandas, puede seleccionar un archivo wheel con un nombre similar a pandas-1.2.3-cp38-win_amd64.whl.

Algunos paquetes de Python disponibles en PyPI no proporcionan un archivo wheel. En este caso, descargue el origen (archivo .zip o .tar.gz) y genere el archivo wheel mediante pip.

Realice los pasos siguientes con una máquina Windows de 64 bits con Python 3.8.x y el paquete wheel instalado:

  1. Descarga del código de origen pandas-1.2.4.tar.gz.
  2. Ejecute pip para obtener el archivo wheel con el siguiente comando: pip wheel --no-deps pandas-1.2.4.tar.gz.

Importación de un paquete

  1. Seleccione Paquetes de Python en Recursos compartidos, en la cuenta de Automation. A continuación, seleccione + Agregar un paquete de Python.

    Screenshot of the Python packages page shows Python packages in the left menu and Add a Python package highlighted.

  2. En la página Agregar un paquete de Python, seleccione un paquete local para cargar. El paquete puede ser un archivo .whl o .tar.gz para Python 3.8 y un archivo .whl para Python 3.10 (versión preliminar).

  3. Escriba un nombre y seleccione la Versión del entorno de ejecución de Python 3.8 o Python 3.10 (versión preliminar).

    Nota:

    Actualmente, la versión del entorno de ejecución de Python 3.10 (versión preliminar) es compatible con trabajos híbridos y en la nube en todas las regiones públicas, excepto Centro de Australia 2, Sur de Corea del Sur, Sur de Suecia, Jio en Centro de la India, Sudeste de Brasil, Centro de la India, Oeste de la India, Centro de Emiratos Árabes Unidos y nubes gubernamentales.

  4. Seleccione Import (Importar).

    Screenshot shows the Add Python 3.8 Package page with an uploaded tar.gz file selected.

Una vez que se haya importado un paquete, este se muestra en la página de Paquetes de Python en su cuenta de Automation. Para quitar un paquete, selecciónelo y luego seleccione Eliminar.

Screenshot shows the Python 3.8 packages page after a package has been imported.

Importación de un paquete con dependencias

Para importar un paquete de Python 3.8 y sus dependencias, importe el siguiente script de Python en un runbook de Python 3.8. Asegúrese de que la identidad administrada esté habilitada para la cuenta de Automation y que tenga acceso de colaborador de Automation para la importación correcta del paquete.

https://github.com/azureautomation/runbooks/blob/master/Utility/Python/import_py3package_from_pypi.py

Importación del script en un runbook

Para información sobre cómo importar el runbook, consulte Importación de un runbook desde Azure Portal. Copie el archivo de GitHub en el almacenamiento al que se pueda acceder desde el portal antes de realizar la importación.

Nota:

Actualmente, no se admite la importación de un runbook desde Azure Portal para Python 3.10 (versión preliminar).

La página Importar un runbook adopta como valor predeterminado el nombre del runbook para que coincida con el nombre del script. Si tiene acceso al campo, puede cambiar el nombre. Tipo de runbook puede adoptar como valor predeterminado Python 2.7. Si es así, asegúrese de cambiarlo a Python 3.8.

Screenshot shows the Python 3 runbook import page.

Ejecución del runbook para importar el paquete y las dependencias

Después de crear y publicar el runbook, ejecútelo para importar el paquete. Consulte Inicio de un runbook en Azure Automation para más información sobre la ejecución del runbook.

El script import_py3package_from_pypi.py requiere los siguientes parámetros:

Parámetro Descripción
subscription_id Identificador de suscripción de la cuenta de Automation
resource_group Nombre del grupo de recursos en el que se define la cuenta de Automation
automation_account Nombre de la cuenta de Automation
module_name Nombre del módulo que se va a importar desde pypi.org
module_version Versión del módulo

El valor del parámetro debe proporcionarse como una sola cadena en el formato siguiente:

-s <subscription_id> -g <resource_group> -a<automation_account> -m <module_name> -v <module_version>

Para más información sobre el uso de parámetros con runbooks, consulte Trabajar con parámetros del runbook.

Usar un paquete en un runbook

Puede usar el paquete importado en un runbook. Agregue el código siguiente para mostrar todos los grupos de recursos de una suscripción de Azure.

#!/usr/bin/env python3 
import os 
import requests  
# printing environment variables 
endPoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/" 
identityHeader = os.getenv('IDENTITY_HEADER') 
payload={} 
headers = { 
  'X-IDENTITY-HEADER': identityHeader,
  'Metadata': 'True' 
} 
response = requests.request("GET", endPoint, headers=headers, data=payload) 
print(response.text)

Nota:

El paquete automationassets de Python no está disponible en pypi.org, por lo que tampoco se puede importar a un trabajo de runbook híbrido de Windows.

Identificación de los paquetes disponibles en el espacio aislado

Use el código siguiente para enumerar los módulos instalados predeterminados:

#!/usr/bin/env python3

import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
   for i in installed_packages])

for package in installed_packages_list:
    print(package)

Cmdlets de PowerShell de Python 3.8

Adición de un nuevo paquete de Python 3.8

New-AzAutomationPython3Package -AutomationAccountName tarademo  -ResourceGroupName mahja -Name requires.io -ContentLinkUri https://files.pythonhosted.org/packages/7f/e2/85dfb9f7364cbd7a9213caea0e91fc948da3c912a2b222a3e43bc9cc6432/requires.io-0.2.6-py2.py3-none-any.whl 

Response  
ResourceGroupName     : mahja 
AutomationAccountName : tarademo 
Name                  : requires.io 
IsGlobal              : False 
Version               : 
SizeInBytes           : 0 
ActivityCount         : 0 
CreationTime          : 9/26/2022 1:37:13 PM +05:30 
LastModifiedTime      : 9/26/2022 1:37:13 PM +05:30 
ProvisioningState     : Creating 

Enumeración de todos los paquetes de Python 3.8

Get-AzAutomationPython3Package -AutomationAccountName tarademo  -ResourceGroupName mahja 

Response : 
ResourceGroupName     : mahja 
AutomationAccountName : tarademo 
Name                  : cryptography 
IsGlobal              : False 
Version               : 
SizeInBytes           : 0 
ActivityCount         : 0 
CreationTime          : 9/26/2022 11:52:28 AM +05:30 
LastModifiedTime      : 9/26/2022 12:11:00 PM +05:30 
ProvisioningState     : Failed 
ResourceGroupName     : mahja 
AutomationAccountName : tarademo 
Name                  : requires.io 
IsGlobal              : False 
Version               : 
SizeInBytes           : 0 
ActivityCount         : 0 
CreationTime          : 9/26/2022 1:37:13 PM +05:30 
LastModifiedTime      : 9/26/2022 1:39:04 PM +05:30 
ProvisioningState     : ContentValidated 
ResourceGroupName     : mahja 
AutomationAccountName : tarademo 
Name                  : sockets 
IsGlobal              : False 
Version               : 1.0.0 
SizeInBytes           : 4495 
ActivityCount         : 0 
CreationTime          : 9/20/2022 12:46:28 PM +05:30 
LastModifiedTime      : 9/22/2022 5:03:42 PM +05:30 
ProvisioningState     : Succeeded 

Obtener detalles sobre un paquete específico

Get-AzAutomationPython3Package -AutomationAccountName tarademo  -ResourceGroupName mahja -Name sockets 


Response  
ResourceGroupName     : mahja 
AutomationAccountName : tarademo 
Name                  : sockets 
IsGlobal              : False 
Version               : 1.0.0 
SizeInBytes           : 4495 
ActivityCount         : 0 
CreationTime          : 9/20/2022 12:46:28 PM +05:30 
LastModifiedTime      : 9/22/2022 5:03:42 PM +05:30 
ProvisioningState     : Succeeded 

Eliminación del paquete de Python 3.8

Remove-AzAutomationPython3Package -AutomationAccountName tarademo  -ResourceGroupName mahja -Name sockets 

Actualización del paquete de Python 3.8

Set-AzAutomationPython3Package -AutomationAccountName tarademo  -ResourceGroupName mahja -Name requires.io -ContentLinkUri https://files.pythonhosted.org/packages/7f/e2/85dfb9f7364cbd7a9213caea0e91fc948da3c912a2b222a3e43bc9cc6432/requires.io-0.2.6-py2.py3-none-any.whl 


ResourceGroupName     : mahja 
AutomationAccountName : tarademo 
Name                  : requires.io 
IsGlobal              : False 
Version               : 0.2.6 
SizeInBytes           : 10109 
ActivityCount         : 0 
CreationTime          : 9/26/2022 1:37:13 PM +05:30 
LastModifiedTime      : 9/26/2022 1:43:12 PM +05:30 
ProvisioningState     : Creating 

Pasos siguientes

Para preparar un runbook de Python, consulte Creación de un runbook de Python.