Управление пакетами Python 3 в службе автоматизации Azure

В этой статье описывается, как импортировать, управлять и использовать пакеты Python 3 в служба автоматизации Azure запуска в среде песочницы Azure и гибридных рабочих ролей Runbook. Пакеты Python должны быть загружены в рабочие роли Hybrid Runbook для успешного выполнения задания. Чтобы упростить модули Runbook, можно использовать пакеты Python для импорта необходимых модулей.

Сведения об управлении пакетами Python 2 см. в статье "Управление пакетами Python 2".

Пакеты Python по умолчанию

Для поддержки модулей Runbook Python 3.8 в службе автоматизации некоторые пакеты Python устанавливаются по умолчанию, и список этих пакетов находится здесь. Версию по умолчанию можно переопределить, импортировав пакеты Python в свою учетную запись службы автоматизации.

Приоритет отдается импортированной версии в учетной записи службы автоматизации Azure. Чтобы импортировать один пакет, см. раздел Импорт пакета. Чтобы импортировать пакет с несколькими пакетами, см. раздел Импорт пакета с зависимостями.

Примечание.

Для Python 3.10 (предварительная версия) не установлены пакеты по умолчанию.

Пакеты как исходные файлы

Служба автоматизации Azure поддерживает пакеты Python, содержащие только код Python и не включающие в себя расширения или код на других языках. Но в среде песочницы Azure может не быть необходимых компиляторов для двоичных файлов C/C++, поэтому рекомендуется использовать файлы wheel.

Примечание.

В настоящее время Python 3.10 (предварительная версия) поддерживает только файлы колесика.

Индекс пакетов Python (PyPI) — это репозиторий программного обеспечения для языка Python. При выборе пакета Python 3 для импорта в учетную запись автоматизации из PyPI обратите внимание на следующие компоненты имени файла:

Выберите версию Python:

Компонент имени файла Description
cp38 Автоматизация поддерживает задания Python 3.8 для облачных заданий.
amd64 Процессы песочницы Azure относятся к 64-разрядной архитектуре Windows.

Например:

  • Чтобы импортировать pandas, выберите файл колесика с именем, похожим на pandas-1.2.3-cp38-win_amd64.whl.

Некоторые пакеты Python, доступные на PyPI, не содержат файл wheel. В таком случае загрузите исходник (файл .zip или .tar.gz) и сгенерируйте файл wheel с помощью pip.

Выполните следующие действия, используя 64-разрядный компьютер Windows с установленным пакетом Python 3.8.x и колесикой:

  1. Загрузите исходный файл pandas-1.2.4.tar.gz.
  2. Запустите pip, чтобы получить файл колеса с помощью следующей команды: pip wheel --no-deps pandas-1.2.4.tar.gz

Импорт пакета

  1. В учетной записи службы автоматизации в области Общие ресурсы выберите Пакеты Python. Затем выберите + Добавить пакет Python.

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

  2. На странице Добавить пакет Python выберите локальный пакет для загрузки. Пакет может быть файлом .whl или .tar.gz для Python 3.8 и файлом .whl для Python 3.10 (предварительная версия).

  3. Введите имя и выберите версию среды выполнения Python 3.8 или Python 3.10 (предварительная версия).

    Примечание.

    В настоящее время версия среды выполнения Python 3.10 (предварительная версия) поддерживается как для облачных, так и гибридных заданий во всех общедоступных регионах, кроме Австралии Central2, Южной Кореи, Швеции, Южной Швеции, Jio India Central, Бразилии, Центральной Индии, Западной Индии, Центральной и Gov облака.

  4. Выберите Импортировать.

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

После импорта пакета он отображается на странице пакетов Python в учетной записи службы автоматизации. Чтобы удалить пакет, выберите его и выберите Удалить.

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

Импорт пакета с зависимостями

Можно импортировать пакет Python 3.8 и его зависимости, импортировав следующий сценарий Python в модуль Runbook Python 3.8. Убедитесь, что управляемое удостоверение включено для учетной записи службы автоматизации и имеет доступ участника автоматизации для успешного импорта пакета.

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

Импорт скрипта в runbook

Сведения об импорте runbook см. в разделе Импорт последовательности runbook с портала Azure. Скопируйте файл из GitHub в хранилище, к которому может получить доступ портал, прежде чем выполнять импорт.

Примечание.

В настоящее время импорт модуля Runbook с портала Azure не поддерживается для Python 3.10 (предварительная версия).

На странице Импорт модуля runbook по умолчанию используется имя runbook в соответствии с именем скрипта. Если у вас есть доступ к полю, вы можете изменить имя. В качестве типа Runbook по умолчанию может быть установлен Python 2.7. Если это так, обязательно измените его на Python 3.8.

Screenshot shows the Python 3 runbook import page.

Запуск runbook для импорта пакета и зависимостей

После создания и публикации модуля runbook запустите его, чтобы импортировать пакет. Дополнительные сведения о запуске модуля runbook см. в статье Запуск модуля runbook в службе автоматизации Azure.

Для скрипта (import_py3package_from_pypi.py) обязательны указанные ниже параметры.

Параметр Описание
subscription_id Идентификатор подписки учетной записи службы автоматизации
resource_group Имя группы ресурсов, в которой определена учетная запись службы автоматизации
automation_account Имя учетной записи автоматизации
module_name Имя модуля, который нужно импортировать из pypi.org
module_version Версия модуля

Значение параметра должно быть предоставлено в виде одной строки в следующем формате:

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

Дополнительные сведения об использовании параметров с модулями runbook см. в разделе Работа с параметрами runbook.

Использование пакета в модуле runbook

Завершив импорт пакета, вы сможете использовать его в runbook. Добавьте следующий код, чтобы вывести список всех групп ресурсов в подписке 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)

Примечание.

Пакет Python automationassets недоступен в pypi.org, поэтому он недоступен для импорта в гибридную рабочую роль Runbook Windows.

Определение доступных пакетов в песочнице

Используйте следующий код, чтобы получить список установленных модулей по умолчанию:

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

Командлеты PowerShell для Python 3.8

Добавление нового пакета 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 

Список всех пакетов 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 

Получение сведений о конкретном пакете

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 

Удаление пакета Python 3.8

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

Обновление пакета 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 

Следующие шаги

Дополнительные сведения см. в статье Создание runbook для Python.