Gerenciar pacotes do Python 3 na Automaçã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 em Hybrid Runbook Workers. Os pacotes do Python devem ser baixados em Hybrid Runbook Workers para execução bem-sucedida do trabalho. Como uma ajuda para simplificar os runbooks, você pode usar pacotes Python para importar os módulos necessários.

Para obter informações de como gerenciar pacotes Python 2, confira Gerenciar pacotes Python 2.

Pacotes padrão do Python

Para dar suporte a runbooks do Python 3.8 no serviço de Automação, alguns pacotes Python são instalados por padrão e uma lista desses pacotes está aqui. A versão padrão pode ser substituída importando pacotes Python na sua conta de Automação.

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

Observação

Não há pacotes padrão instalados para Python 3.10 (versão prévia).

Pacotes como arquivos de origem

A Automação do Azure dá suporte apenas a um pacote do Python que contém apenas o código Python e não inclui outras extensões de linguagem ou código em outras linguagens. No entanto, o ambiente de área restrita 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.

Observação

Atualmente, o Python 3.10 (versão prévia) só dá suporte a arquivos de roda.

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

Selecione uma versão do Python:

Parte de nome de arquivo Descrição
cp38 A Automação dá suporte a Python 3.8 para trabalhos na nuvem.
amd64 Os processos da área restrita do Azure são da arquitetura Windows 64 bits.

Por exemplo:

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

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

Execute as etapas a seguir usando uma máquina Windows de 64 bits com Python 3.8.x e o pacote de roda instalados:

  1. Fazer o download do arquivo de origem pandas-1.2.4.tar.gz.
  2. Execute pip para obter o arquivo de roda com o seguinte comando: pip wheel --no-deps pandas-1.2.4.tar.gz

Importar um pacote

  1. Na sua conta de Automação, selecione Pacotes do Python em Recursos Compartilhados. Selecione + Adicionar pacote do 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 um pacote Python, selecione um pacote local a ser carregado. O pacote pode ser um arquivo .whl ou .tar.gz para Python 3.8 e um arquivo .whl para Python 3.10 (versão prévia).

  3. Insira um nome e selecione a Versão do Runtime como Python 3.8 ou Python 3.10 (versão prévia).

    Observação

    Atualmente, a versão do runtime do Python 3.10 (versão prévia) tem suporte para trabalhos de Nuvem e Híbrido em todas as regiões Públicas, exceto Austrália Central2, Sul da Coreia, Sul da Suécia, Jio Índia Central, Sudeste do Brasil, Índia Central, Oeste da Índia, EAU Central e Nuvens Gov.

  4. Selecione Importar.

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

Depois que um pacote for importado, ele será listado na página Pacotes Python em sua conta de Automação. Para remover um pacote, selecione-o e selecione Excluir.

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

Importar um pacote com dependências

Para importar um pacote do Python 3.8 e as dependências, importe o seguinte script Python em um runbook do Python 3.8. Verifique se a Identidade gerenciada está habilitada para sua conta de Automação e tem acesso de Colaborador de Automação para importação bem-sucedida do pacote.

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

Importar o script em um runbook

Para obter informações sobre como importar o runbook, confira Importar um runbook do portal do Azure. Copie o arquivo de GitHub para o armazenamento que o portal pode acessar antes de executar a importação.

Observação

Atualmente, não há suporte para a importação de um runbook do Portal do Azure para o Python 3.10 (versão prévia).

A página Importar um runbook usa como padrão o nome do runbook para corresponder ao nome do script. Se você tiver acesso ao campo, poderá alterar o nome. O Tipo do runbook pode usar como padrão o Python 2.7. Se isso acontecer, mude-o 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. Confira Iniciar um runbook na Automação do Azure para obter detalhes sobre como executar o runbook.

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

Parâmetro Descrição
subscription_id ID da assinatura da conta da Automação
resource_group Nome do grupo de recursos em que a conta da Automação está definida
automation_account Nome da conta da Automação
module_name Nome do módulo a ser importado de pypi.org
module_version A versão do módulo

O valor do parâmetro deve ser fornecido como uma única cadeia de caracteres 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, confira Trabalhar com parâmetros de runbook.

Use 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)

Observação

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

Identificar pacotes disponíveis na área restrita

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

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

Adicionar novo pacote do 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 do 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 o pacote do Python 3.8

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

Atualizar o pacote do 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óximas etapas

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