Gerir pacotes Python 3 na Automatização do Azure

Este artigo descreve como importar, gerenciar e usar pacotes Python 3 na Automação do Azure em execução no ambiente de área restrita do Azure e no Hybrid Runbook Workers. Os pacotes Python devem ser transferidos em Funções de Trabalho de Runbook Híbridas para uma execução bem-sucedida da tarefa. Para ajudar a simplificar os runbooks, pode utilizar pacotes Python para importar os módulos de que precisa.

Para obter informações sobre como gerenciar pacotes Python 2, consulte Gerenciar pacotes Python 2.

Pacotes Python padrão

Para suportar runbooks Python 3.8 no serviço de Automatização, alguns pacotes Python são instalados por predefinição e uma lista destes pacotes está aqui. A versão predefinida pode ser substituída ao importar pacotes Python para a sua conta de Automatização.

A preferência é dada à versão importada na sua conta de Automatização. Para importar um único pacote, consulte Importar um pacote. Para importar um pacote com vários pacotes, consulte Importar um pacote com dependências.

Nota

Não há pacotes padrão instalados para Python 3.10 (visualização).

Pacotes como arquivos de origem

A Automação do Azure dá suporte apenas a um pacote Python que contém apenas código Python e não inclui outras extensões de linguagem ou código em outras linguagens. No entanto, o ambiente de Sandbox do Azure pode não ter os compiladores necessários para binários C/C++, portanto, é recomendável usar arquivos de roda em vez disso.

Nota

Atualmente, o Python 3.10 (visualização) suporta apenas arquivos de roda.

O Python Package Index (PyPI) é um repositório de software para a linguagem de programação Python. Ao selecionar um pacote Python 3 para importar do PyPI para sua conta de automação, observe as seguintes partes do nome do arquivo:

Selecione uma versão do Python:

Parte do nome do arquivo Descrição
CP38 A automação suporta Python 3.8 para trabalhos na nuvem.
AMD64 Os processos de área restrita do Azure são arquitetura de 64 bits do Windows.

Por exemplo:

  • Para importar pandas - selecione um arquivo de roda com um nome semelhante a pandas-1.2.3-cp38-win_amd64.whl.

Alguns pacotes Python disponíveis no PyPI não fornecem um arquivo de roda. Nesse caso, baixe o arquivo de origem (.zip ou .tar.gz) e gere o arquivo wheel usando pip.

Execute as seguintes etapas usando uma máquina Windows de 64 bits com Python 3.8.x e pacote wheel instalado:

  1. Transfira o ficheiro pandas-1.2.4.tar.gzde origem .
  2. Execute pip para obter o arquivo wheel com o seguinte comando: pip wheel --no-deps pandas-1.2.4.tar.gz

Importar um pacote

  1. Na sua Conta de Automatização, selecione Pacotes Python em Recursos Partilhados. Selecione + Adicionar um pacote Python.

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

  2. Na página Adicionar Pacote Python , selecione um pacote local para carregar. O pacote pode ser um ficheiro .whl ou .tar.gz para o ficheiro Python 3.8 e .whl para Python 3.10 (pré-visualização).

  3. Introduza um nome e selecione a Versão do Runtime como Python 3.8 ou Python 3.10 (pré-visualização).

    Nota

    Atualmente, a versão de tempo de execução do Python 3.10 (visualização) é suportada para trabalhos em nuvem e híbridos em todas as regiões públicas, exceto Austrália Central2, Coreia do Sul, Sul da Suécia, Jio India Central, Sudeste do Brasil, Índia Central, Índia Ocidental, Central dos Emirados Árabes Unidos e nuvens Gov.

  4. Selecione Import (Importar).

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

Após a importação de um pacote, este é apresentado na página pacotes Python na sua conta de Automatização. Para remover um pacote, selecione o pacote e selecione Eliminar.

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

Importar um pacote com dependências

Pode importar um pacote Python 3.8 e as respetivas dependências ao importar o seguinte script Python para um runbook Python 3.8. Certifique-se de que a Identidade gerida está ativada para a sua conta de Automatização e tem acesso de Contribuidor de Automatização para uma importação bem-sucedida do pacote.

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

Importar o script para um runbook

Para obter informações sobre como importar o runbook, consulte Importar um runbook do portal do Azure. Copie o ficheiro do GitHub para o armazenamento ao qual o portal pode aceder antes de executar a importação.

Nota

Atualmente, a importação de um runbook do Portal do Azure não é suportada para Python 3.10 (visualização).

A página Importar um runbook predefine o nome do runbook para corresponder ao nome do script. Se tiver acesso ao campo, pode alterar o nome. O tipo de runbook pode ser predefinido para Python 2.7. Se isto acontecer, certifique-se de que o altera para Python 3.8.

Screenshot shows the Python 3 runbook import page.

Executar o runbook para importar o pacote e as dependências

Depois de criar e publicar o runbook, execute-o para importar o pacote. Consulte Iniciar um runbook na Automatização do Azure para obter detalhes sobre a execução do runbook.

O script (import_py3package_from_pypi.py) requer os seguintes parâmetros.

Parâmetro Description
subscription_id ID da Subscrição da conta de Automatização
resource_group Nome do grupo de recursos no qual a conta de Automatização está definida
automation_account Nome da conta de Automatização
module_name Nome do módulo a ser importado pypi.org
module_version Versão do módulo

O valor do parâmetro deve ser fornecido como uma única cadeia no formato abaixo:

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

Para obter mais informações sobre como usar parâmetros com runbooks, consulte Trabalhar com parâmetros de runbook.

Usar um pacote em um runbook

Com o pacote importado, você pode usá-lo em um runbook. Adicione o código a seguir para listar todos os grupos de recursos em uma assinatura do 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

O pacote Python automationassets não está disponível no pypi.org, portanto, não está disponível para importação em um runbook worker híbrido do Windows.

Identificar pacotes disponíveis na área restrita

Use o código a seguir para listar os módulos instalados padrão:

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

Adicionar novo pacote 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 

Listar todos os pacotes 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 

Obter detalhes sobre o pacote 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 

Remover pacote Python 3.8

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

Atualizar pacote 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 

Próximos passos

Para preparar um runbook do Python, consulte Criar um runbook do Python.