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:
- Descarga del código de origen
pandas-1.2.4.tar.gz
. - 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
Seleccione Paquetes de Python en Recursos compartidos, en la cuenta de Automation. A continuación, seleccione + Agregar un paquete de Python.
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).
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.
Seleccione importar.
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.
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.
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.