Бөлісу құралы:


Управление пакетами 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.

    Снимок экрана: страница

  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. Выберите Импорт.

    Снимок экрана: страница добавления пакета Python 3.8 с выбранным tar.gz файлом.

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

Снимок экрана: страница пакетов Python 3.8 после импорта пакета.

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

Можно импортировать пакет 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.

На снимке экрана показана страница импорта runbook для Python 3.

Запуск 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.