Gestire pacchetti Python 3 in Automazione di Azure

Questo articolo illustra come importare, gestire e usare i pacchetti Python 3 in Automazione di Azure in esecuzione nell'ambiente sandbox di Azure e nei ruoli di lavoro ibridi per runbook. Per eseguire correttamente il processo i pacchetti Python devono essere scaricati nei ruoli di lavoro ibridi. Per favorire la semplificazione dei runbook, è possibile importare i moduli necessari usando pacchetti Python.

Per informazioni sulla gestione dei pacchetti Python 2, vedere Gestire i pacchetti Python 2.

Pacchetti Python predefiniti

Per supportare i runbook Python 3.8 nel servizio di automazione, alcuni pacchetti Python vengono installati per impostazione predefinita ed è possibile trovare un elenco di questi pacchetti qui. La versione predefinita può essere sostituita importando pacchetti Python nell'account di Automazione.

La preferenza viene assegnata alla versione importata nell'account di Automazione. Per importare un singolo pacchetto, vedere Importare un pacchetto. Per importare un pacchetto con più pacchetti, vedere Importare un pacchetto con dipendenze.

Nota

Non sono installati pacchetti predefiniti per Python 3.10 (anteprima).

Pacchetti come file di origine

Automazione di Azure supporta solo un pacchetto Python che contiene solo codice Python e non include altre estensioni del linguaggio o codice in altri linguaggi. L'ambiente sandbox di Azure potrebbe tuttavia non avere i compilatori necessari per i file binari C/C++, quindi è consigliabile usare file wheel.

Nota

Python 3.10 (anteprima) supporta attualmente solo i file wheel.

Python Package Index (PyPI) è un repository di software per il linguaggio di programmazione Python. Quando si seleziona un pacchetto Python 3 da importare nell'account di Automazione da PyPI, prendere nota delle parti del nome file seguenti:

Selezionare una versione di Python:

Parte del nome file Descrizione
cp38 Automazione supporta Python 3.8 per i processi cloud.
amd64 I processi sandbox di Azure sono basati sull'architettura Windows a 64 bit.

Ad esempio:

  • Per importare pandas: selezionare un file wheel con un nome simile a pandas-1.2.3-cp38-win_amd64.whl.

Alcuni pacchetti Python disponibili in PyPI non forniscono un file wheel. In questo caso, scaricare l'origine (file con estensione zip o tar.gz) e generare il file wheel usando pip.

Seguire questa procedura usando un computer Windows a 64 bit con il pacchetto Python 3.8.x e wheel installato:

  1. Scaricare il file di origine pandas-1.2.4.tar.gz.
  2. Eseguire pip per ottenere il file wheel con il comando seguente: pip wheel --no-deps pandas-1.2.4.tar.gz

Importare un pacchetto

  1. Nell'account di Automazione selezionare Pacchetti Python in Risorse condivise. Quindi selezionare + Aggiungi un pacchetto Python.

    Screenshot della pagina dei pacchetti Python che mostra i pacchetti Python nel menu a sinistra e Aggiungi un pacchetto Python evidenziato.

  2. Nella pagina Aggiungi pacchetto Python selezionare un pacchetto locale da caricare. Il pacchetto può essere un file .whl o .tar.gz per Python 3.8 e un file .whl per Python 3.10 (anteprima).

  3. Immettere un nome e selezionare la versione di runtime come Python 3.8 o Python 3.10 (anteprima).

    Nota

    La versione del runtime di Python 3.10 (anteprima) è attualmente supportata sia per i processi cloud che ibridi in tutte le aree pubbliche, ad eccezione di Australia centrale 2, Corea meridionale, Svezia meridionale, Jio - India centrale, Brasile sud-orientale, India centrale, India occidentale, Emirati Arabi Uniti centrali e cloud per enti pubblici.

  4. Selezionare Importa.

    Screenshot che mostra la pagina Aggiungi pacchetto Python 3.8 con un file tar.gz caricato selezionato.

Dopo l'importazione, il pacchetto viene elencato nella pagina dei pacchetti Python dell'account di Automazione. Per rimuovere un pacchetto, selezionarlo e fare clic su Elimina.

Screenshot che mostra la pagina Pacchetti Python 3.8.x dopo l'importazione di un pacchetto.

Importare un pacchetto con dipendenze

È possibile importare un pacchetto Python 3.8 e le relative dipendenze importando il seguente script Python in un runbook Python 3.8. È necessario assicurarsi che l'identità gestita sia abilitata per l'account di Automazione e disponga di autorizzazioni di Collaboratore Automazione per l'importazione corretta del pacchetto.

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

Importazione dello script in un runbook

Per informazioni sull'importazione del runbook, vedere Importare un runbook dal portale di Azure. Copiare il file da GitHub nell'archiviazione a cui il portale può accedere prima di eseguire l'importazione.

Nota

L'importazione di un runbook dal portale di Azure non è attualmente supportata per Python 3.10 (anteprima).

Per impostazione predefinita, la pagina Importa un runbook corrisponde al nome dello script. Se si ha accesso al campo, è possibile modificare il nome. Il tipo di runbook può usare sempre Python 2.7. In caso affermativo, assicurarsi di modificarlo in Python 3.8.

Screenshot che mostra la pagina di importazione del runbook Python 3.

Esecuzione del runbook per importare il pacchetto e le dipendenze

Dopo aver creato e pubblicato il runbook, eseguirlo per importare il pacchetto. Per l’esecuzione di un runbook, vedere Avviare un runbook in Automazione di Azure.

Lo script (import_py3package_from_pypi.py) richiede i parametri seguenti.

Parametro Descrizione
subscription_id ID sottoscrizione dell'account di Automazione
resource_group Nome del gruppo di risorse definito dall'account di Automazione in
automation_account Nome dell'account di Automazione
module_name Nome del modulo da importare da pypi.org
module_version Versione del modulo

Il valore del parametro deve essere fornito come stringa singola nel seguente formato:

-s <id_sottoscrizione> -g <gruppo_risorse> -a<account_automazione> -m <nome_modulo> -v <versione_modulo>

Per altre informazioni sull'uso dei parametri con i runbook, vedere Usare i parametri del runbook.

Usare un pacchetto in un runbook

Il pacchetto importato può essere usato in un runbook. Aggiungere il codice seguente per elencare tutti i gruppi di risorse in una sottoscrizione di 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

Il pacchetto automationassets di Python non è disponibile in pypi.org, quindi non è disponibile per l'importazione in un ruolo di lavoro ibrido per runbook di Windows.

Identificare i pacchetti disponibili nella sandbox

Usare il codice seguente per elencare i moduli installati predefiniti:

#!/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)

Cmdlet di PowerShell per Python 3.8

Aggiungere un nuovo pacchetto 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 

Elencare tutti i pacchetti 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 

Ottenere informazioni dettagliate su un pacchetto specifico

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 

Rimuovere il pacchetto Python 3.8

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

Aggiornare il pacchetto 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 

Passaggi successivi

Per preparare un runbook Python, vedere Creare un runbook di Python.