你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 自动化中管理 Python 3 程序包

本文介绍如何在 Azure 自动化(在 Azure 沙盒环境和混合 Runbook 辅助角色上运行)中导入、管理和使用 Python 3 包。 要成功执行作业,应在混合 Runbook 辅助角色上下载 Python 包。 为了帮助简化 runbook,可以使用 Python 包导入所需的模块。

有关如何管理 Python 2 包的信息,请参阅管理 Python 2 包

默认 Python 包

为了在自动化服务中支持 Python 3.8 runbook,默认安装了一些 Python 包,此处提供了这些包的列表。 通过在自动化帐户中导入 Python 包,可以替代默认版本。

优先考虑自动化帐户中已导入的版本。 若要导入单个包,请参阅导入包。 若要导入包含多个包的包,请参阅导入具有依赖项的包

注意

没有为 Python 3.10(预览版)安装默认包。

作为源文件的包

Azure 自动化仅支持 Python 包,该 Python 只包含 Python 代码,不包括其他语言的扩展或者用其他语言写成的代码。 然而,Azure 沙盒可能没有所需的 C/C++ 二进制文件编辑器,所以建议使用 wheel 文件

注意

目前,Python 3.10(预览版)仅支持 wheel 文件。

Python 包索引 (PyPI) 是 Python 编程语言的软件存储库。 从 PyPI 中选择 Python 3 包导入自动化帐户时,请注意以下文件名部分:

选择 Python 版本:

文件名部分 说明
cp38 自动化支持使用 Python 3.8 进行云作业。
amd64 Azure 沙盒进程是 Windows 64 位体系结构。

例如:

  • 若要导入 pandas - 选择名称类似于 pandas-1.2.3-cp38-win_amd64.whl 的 wheel 文件。

PyPI 上面的一些 Python 包不提供 wheel 文件。 在这种情况下,下载源文件(.zip 或者.tar.gz 文件)然后使用 pip 生成 wheel 文件。

使用装有 Python 3.8.x 和 wheel 包的 64 位 Windows 计算机执行以下步骤:

  1. 下载源文件pandas-1.2.4.tar.gz
  2. 运行 pip,使用以下命令获取 wheel 文件: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 包页中,选择要上传的本地包。 对于 Python 3.8,包可以是 .whl.tar.gz 文件;对于 Python 3.10(预览版),包可以是 .whl 文件。

  3. 输入名称,对于运行时版本,选择 Python 3.8 或 Python 3.10(预览版)。

    注意

    目前,除澳大利亚中部 2、韩国南部、瑞典南部、Jio 印度中部、巴西东南部、印度中部、印度西部、阿拉伯联合酋长国中部和 Gov 云之外的所有公共区域的云和混合作业都支持 Python 3.10(预览版)运行时版本。

  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 脚本导入到 Python 3.8 runbook 中。 确保为自动化帐户启用了托管标识,并使托管标识具有“自动化参与者”访问权限,以便成功导入包。

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

将脚本导入 runbook

有关导入 runbook 的信息,请参阅从 Azure 门户导入 runbook。 在运行导入之前,请将文件从 GitHub 复制到可供门户访问的存储中。

注意

目前,Python 3.10(预览版)不支持从 Azure 门户导入 Runbook。

导入 runbook 页默认将 runbook 名称设置为与脚本名称匹配。 如果有权访问该字段,则可以更改该名称。 Runbook 类型可能默认设置为 Python 2.7。 如果是这样,请确保将其更改为 Python 3.8

Screenshot shows the Python 3 runbook import page.

执行 runbook 以导入包和依赖项

创建并发布 runbook 后,运行它来导入包。 若要详细了解如何执行 runbook,请参阅在 Azure 自动化中启动 runbook

脚本 (import_py3package_from_pypi.py) 需要以下参数。

参数 说明
subscription_id 自动化帐户的订阅 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 上不可用,因此无法将其导入到 Windows 混合 Runbook 辅助角色。

确定沙盒中可用的包

使用以下代码列出默认已安装的模块:

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

Python 3.8 PowerShell cmdlet

添加新的 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 

后续步骤

要准备 Python runbook,请参阅创建 Python runbook