Поделиться через


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

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

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

Примечание.

Python 2.7 и Python 3.8 больше не поддерживаются родительской платформой Python. Рекомендуется создавать модули Runbook только в Python 3.10.

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

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

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

Примечание.

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

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

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

Примечание.

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

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

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

Компонент имени файла Описание
cp310 Автоматизация поддерживает задания Python 3.10 для облачных заданий.
manylinux_x86_64 Процессы песочницы Azure — это 64-разрядная архитектура Linux для модулей Runbook Python 3.10.

Например:

  • Чтобы импортировать pandas, выберите wheel-файл с именем, аналогичным pandas-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

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

Выполните следующие действия, используя 64-разрядный компьютер Linux с установленным пакетом Python 3.10.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.

  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 по умолчанию используется имя runbook в соответствии с именем скрипта. Если у вас есть доступ к соответствующему полю, вы можете изменить название. В качестве типа Runbook по умолчанию может быть установлен Python 2.7. Если это так, обязательно измените его на Python 3.8.

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

Выполнение модуля Runbook для импорта пакета и зависимостей

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

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

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

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

-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 см. Создание runbook на Python.