Partager via


Gérer des packages Python 3 dans Azure Automation

Cet article décrit comment importer, gérer et utiliser des packages Python 3 dans Azure Automation exécuté sur l’environnement sandbox Azure et Hybrid Runbook Workers. Les packages Python doivent être téléchargés sur des Runbook Workers hybrides pour une exécution réussie des travaux. Vous pouvez simplifier les runbooks en utilisant des packages Python pour importer les modules dont vous avez besoin.

Pour plus d’informations sur la gestion des packages Python 2, consultez Gérer les packages Python 2.

Remarque

Python 2.7 et Python 3.8 ne sont plus pris en charge par la plateforme parente Python. Nous vous recommandons de créer des runbooks en Python 3.10 uniquement.

Packages Python par défaut

Pour prendre en charge les runbooks Python 3.8 dans le service Automation, certains packages Python sont installés par défaut et une liste de ces packages se trouve ici. La version par défaut peut être remplacée en important des packages Python dans votre compte Automation.

La préférence est donnée à la version importée dans le compte Automation. Pour importer un package unique, consultez Importer un package. Pour importer un package avec plusieurs packages, consultez Importer un package avec des dépendances.

Remarque

Aucun package par défaut n’est installé pour Python 3.10.

Packages en tant que fichiers sources

Azure Automation prend en charge uniquement un package Python qui contient uniquement du code Python et qui n’inclut pas des extensions dans d’autres langages ou du code dans d’autres langages. Toutefois, il est possible que l’environnement de bac à sable Azure ne soit pas doté des compilateurs requis pour les fichiers binaires C/C++. Nous vous recommandons donc d’utiliser à la place des fichiers wheel.

Remarque

Actuellement, Python 3.10 prend uniquement en charge les fichiers wheel.

Python Package Index (PyPI) est un référentiel de logiciels pour le langage de programmation Python. Lorsque vous sélectionnez un package Python 3 à importer dans votre compte Automation à partir de PyPI, notez les parties suivantes du nom de fichier :

Sélectionnez une version de Python :

Partie du nom de fichier Description
cp310 Automation prend en charge Python 3.10 pour les travaux cloud.
manylinux_x86_64 Les processus de bac à sable Azure reposent sur une architecture 64 bits basée sur Linux, destinée aux runbooks Python 3.10.

Par exemple :

  • Pour importer pandas - sélectionnez un fichier wheel avec un nom similaire à pandas-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Certains packages Python disponibles sur PyPI ne fournissent pas de fichier wheel. Dans ce cas, téléchargez le fichier source (.zip ou .tar.gz), puis générez le fichier wheel en utilisant pip.

Suivez cette procédure en utilisant un ordinateur Linux 64 bits avec Python 3.10. x et le package wheel installé :

  1. Téléchargez le fichier source pandas-1.2.4.tar.gz.
  2. Exécutez pip pour récupérer le fichier wheel avec la commande suivante : pip wheel --no-deps pandas-1.2.4.tar.gz

Importer un package

Pour importer un package, procédez comme suit :

  1. Dans votre compte Automation, sélectionnez Packages Python sous Ressources partagées. Puis sélectionnez + Add a Python package (Ajouter un package Python).

    Capture d’écran de la page des packages Python montrant les packages Python dans le menu de gauche et Ajouter un package Python sélectionné.

  2. Dans la page Ajouter un package Python, sélectionnez un package local à charger. Le package peut être .whl ou .tar.gz fichier pour le fichier Python 3.8 et .whl pour Python 3.10.

  3. Entrez un nom et sélectionnez la version du runtime en tant que Python 3.8 ou Python 3.10.

  4. Cliquez sur Importer.

    Capture d’écran montrant la page Ajouter un package Python 3.8 avec un fichier tar.gz chargé sélectionné.

Dès qu’un package est importé, il est listé dans la page des packages Python de votre compte Automation. Pour supprimer un package, sélectionnez-le, puis cliquez sur Supprimer.

Capture d’écran montrant la page Packages Python 3.8 après l’importation d’un package.

Importer un package avec des dépendances

Vous pouvez importer un package Python 3.8 et ses dépendances en important le script Python suivant dans un runbook Python 3.8. Vérifiez que l’identité managée est activée pour votre compte Automation et dispose d’un accès contributeur Automation pour une importation réussie du package.

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

Importer le script dans un runbook

Pour plus d’informations sur l’importation des runbooks, consultez Importer un runbook à partir du Portail Azure. Copiez le fichier à partir de GitHub vers le stockage auquel le portail peut accéder avant d’exécuter l’importation.

La page Importer un runbook donne par défaut un nom au runbook pour qu’il corresponde à celui du script. Si vous avez accès au champ, vous pouvez modifier le nom. Le type de runbook peut par défaut être Python 2.7. Si c’est le cas, veillez à le remplacer par Python 3.8.

Capture d’écran montre la page d’importation du runbook Python 3.

Exécuter le runbook pour importer le package et les dépendances

Après avoir créé et publié le runbook, exécutez-le pour importer le package. Pour plus d’informations sur l’exécution du runbook, consultez Démarrer un runbook dans Azure Automation.

Le script (import_py3package_from_pypi.py) requiert les paramètres suivants.

Paramètre Description
identifiant_d'abonnement ID d’abonnement du compte Automation
groupe de ressources Nom du groupe de ressources dans lequel est défini le compte Automation
automation_account Nom du compte Automation
module_name Nom du module à importer de pypi.org
module_version Version du module

La valeur du paramètre doit être fournie sous forme d’une chaîne unique au format ci-dessous :

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

Pour plus d’informations sur l’utilisation des paramètres avec runbooks, consultez Utiliser les paramètres runbook.

Utiliser un package dans un runbook

Une fois le package importé, vous pouvez l’utiliser dans un runbook. Ajoutez le code suivant pour lister tous les groupes de ressources dans un abonnement 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)

Remarque

Étant donné que le package automationassets Python n'est pas disponible sur pypi.org, il ne peut pas être importé sur un runbook worker hybride Windows.

Identifier les packages disponibles dans le bac à sable

Utilisez le code suivant pour répertorier les modules installés par défaut :

#!/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 PowerShell pour Python 3.8

Ajouter un nouveau package 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 

Répertorier tous les packages 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 

Obtenir des détails sur un package spécifique

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 

Supprimer le package Python 3.8

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

Mettre à jour le package 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 

Étapes suivantes

Pour préparer un runbook Python, consultez Créer un runbook Python.