在 Azure 自动化中管理 Python 3 程序包
本文介绍如何在 Azure 自动化(在 Azure 沙盒环境和混合 Runbook 辅助角色上运行)中导入、管理和使用 Python 3 包。 要成功执行作业,应在混合 Runbook 辅助角色上下载 Python 包。 为了帮助简化 runbook,可以使用 Python 包导入所需的模块。
有关如何管理 Python 2 包的信息,请参阅管理 Python 2 包。
默认 Python 包
为了在自动化服务中支持 Python 3.8 runbook,默认安装了一些 Python 包,此处提供了这些包的列表。 通过在自动化帐户中导入 Python 包,可以替代默认版本。
优先考虑自动化帐户中已导入的版本。 若要导入单个包,请参阅导入包。 若要导入包含多个包的包,请参阅导入具有依赖项的包。
作为源文件的包
Azure 自动化仅支持 Python 包,该 Python 只包含 Python 代码,不包括其他语言的扩展或者用其他语言写成的代码。 然而,Azure 沙盒可能没有所需的 C/C++ 二进制文件编辑器,所以建议使用 wheel 文件。
Python 包索引 (PyPI) 是 Python 编程语言的软件存储库。 从 PyPI 中选择 Python 3 包导入自动化帐户时,请注意以下文件名部分:
选择 Python 版本:
Python 3.8(正式版)
文件名部分 | 说明 |
---|---|
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 计算机执行以下步骤:
- 下载源文件
pandas-1.2.4.tar.gz
。 - 运行 pip,使用以下命令获取 wheel 文件:
pip wheel --no-deps pandas-1.2.4.tar.gz
导入包
在你的自动化帐户中,在“共享资源”下选择“Python 程序包”。 接下来,选择 + 添加 Python 包。
在 添加 Python 包页中,选择要上传的本地包。 对于 Python 3.8,该包可以是 .whl 或 .tar.gz 文件。
输入名称,并选择 Python 3.8 作为“运行时版本”。
选择“导入” 。
导入包后,它会在自动化帐户中的“Python 包”页上列出。 若要删除某个包,请先选择该包,然后选择删除。
导入具有依赖项的包
可以导入 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 复制到可供门户访问的存储中。
“导入 runbook”页默认将 runbook 名称设置为与脚本名称匹配。 如果有权访问该字段,则可以更改该名称。 Runbook 类型可能默认设置为 Python 2.7。 如果是这样,请确保将其更改为 Python 3.8。
执行 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.chinacloudapi.cn/"
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。