Skip to main content
 首页 » 编程设计

python之分页异步迭代器协议(protocol)不可用(适用于 Python 的 Azure SDK)

2024年08月15日31jirigala

我要实现的目标

我正在尝试使用 Python SDK 在 Azure 上自动创建订阅和资源组。

为此,我需要一个具有权限的服务主体帐户(客户端 ID;客户端 secret ;租户 ID),以至少检索注册帐户并创建订阅和资源组。


我是如何努力实现它的

我尝试列出注册帐户但没有成功(是的,我正在导入 azure.mgmt.billing、azure.mgmt 和 azure.common,等等)

  1. 首先我实例化客户端:

    billing_client = azure.mgmt.billing.BillingManagementClient(credentials, subscription_id) 
    
  2. 然后我尝试以两种不同的方式打印结果:

    # A 
    print(list(billing_client.enrollment_accounts.list())) 
     
    # B 
    for enrollment_account in billing_client.enrollment_accounts.list(): 
        print(enrollment_account) 
    

我面临什么问题?

我遇到的问题是出现以下错误:

Paging async iterator protocol is not available for EnrollmentAccountPaged

其他 list() 方法也会发生这种情况,例如当我使用类似的方法检索资源组时

rm_client = ResourceManagementClient(credentials, subscription_id) 
resource_groups = rm_client.resource_groups.list() 

然后,我得到错误:

Paging async iterator protocol is not available for ResourceGroupPaged


我如何认为我的问题已解决?

我很想知道为什么会出现此错误,以及如何修复它。来自 Azure 的示例代码没有以不同的方式使用方法或对象。


环境怎么样?

Python 版本:Python 3.7

包:

Package Version Latest Version 
PyJWT   1.6.4   1.6.4 
adal    1.1.0   1.1.0 
asn1crypto  0.24.0  0.24.0 
azure-common    1.1.16  1.1.16 
azure-mgmt  4.0.0   4.0.0 
azure-mgmt-advisor  1.0.1   1.0.1 
azure-mgmt-applicationinsights  0.1.1   0.1.1 
azure-mgmt-authorization    0.50.0  0.50.0 
azure-mgmt-batch    5.0.1   5.0.1 
azure-mgmt-batchai  2.0.0   2.0.0 
azure-mgmt-billing  0.2.0   0.2.0 
azure-mgmt-cdn  3.0.0   3.0.0 
azure-mgmt-cognitiveservices    3.0.0   3.0.0 
azure-mgmt-commerce 1.0.1   1.0.1 
azure-mgmt-compute  4.3.0   4.3.0 
azure-mgmt-consumption  2.0.0   2.0.0 
azure-mgmt-containerinstance    1.2.0   1.2.0 
azure-mgmt-containerregistry    2.2.0   2.2.0 
azure-mgmt-containerservice 4.2.2   4.2.2 
azure-mgmt-cosmosdb 0.4.1   0.5.0 
azure-mgmt-datafactory  0.6.0   0.6.0 
azure-mgmt-datalake-analytics   0.6.0   0.6.0 
azure-mgmt-datalake-nspkg   2.0.0   3.0.0 
azure-mgmt-datalake-store   0.5.0   0.5.0 
azure-mgmt-datamigration    1.0.0   2.0.0 
azure-mgmt-devspaces    0.1.0   0.1.0 
azure-mgmt-devtestlabs  2.2.0   2.2.0 
azure-mgmt-dns  2.1.0   2.1.0 
azure-mgmt-eventgrid    1.0.0   1.0.0 
azure-mgmt-eventhub 2.1.0   2.1.0 
azure-mgmt-hanaonazure  0.1.1   0.2.1 
azure-mgmt-iotcentral   0.1.0   0.2.0 
azure-mgmt-iothub   0.5.0   0.6.0 
azure-mgmt-iothubprovisioningservices   0.2.0   0.2.0 
azure-mgmt-keyvault 1.1.0   1.1.0 
azure-mgmt-loganalytics 0.2.0   0.2.0 
azure-mgmt-logic    3.0.0   3.0.0 
azure-mgmt-machinelearningcompute   0.4.1   0.4.1 
azure-mgmt-managementgroups 0.1.0   0.1.0 
azure-mgmt-managementpartner    0.1.0   0.1.0 
azure-mgmt-maps 0.1.0   0.1.0 
azure-mgmt-marketplaceordering  0.1.0   0.1.0 
azure-mgmt-media    1.0.0   1.0.0 
azure-mgmt-monitor  0.5.2   0.5.2 
azure-mgmt-msi  0.2.0   0.2.0 
azure-mgmt-network  2.2.1   2.2.1 
azure-mgmt-notificationhubs 2.0.0   2.0.0 
azure-mgmt-nspkg    3.0.2   3.0.2 
azure-mgmt-policyinsights   0.1.0   0.1.0 
azure-mgmt-powerbiembedded  2.0.0   2.0.0 
azure-mgmt-rdbms    1.3.0   1.3.0 
azure-mgmt-recoveryservices 0.3.0   0.3.0 
azure-mgmt-recoveryservicesbackup   0.3.0   0.3.0 
azure-mgmt-redis    5.0.0   5.0.0 
azure-mgmt-relay    0.1.0   0.1.0 
azure-mgmt-reservations 0.2.1   0.3.0 
azure-mgmt-resource 2.0.0   2.0.0 
azure-mgmt-scheduler    2.0.0   2.0.0 
azure-mgmt-search   2.0.0   2.0.0 
azure-mgmt-servicebus   0.5.2   0.5.2 
azure-mgmt-servicefabric    0.2.0   0.2.0 
azure-mgmt-signalr  0.1.1   0.1.1 
azure-mgmt-sql  0.9.1   0.9.1 
azure-mgmt-storage  2.0.0   3.0.0 
azure-mgmt-subscription 0.2.0   0.2.0 
azure-mgmt-trafficmanager   0.50.0  0.50.0 
azure-mgmt-web  0.35.0  0.40.0 
azure-nspkg 3.0.2   3.0.2 
certifi 2018.8.24   2018.8.24 
cffi    1.11.5  1.11.5 
chardet 3.0.4   3.0.4 
cryptography    2.3.1   2.3.1 
idna    2.7 2.7 
isodate 0.6.0   0.6.0 
msrest  0.6.0   0.6.0 
msrestazure 0.5.0   0.5.0 
oauthlib    2.1.0   2.1.0 
pip 10.0.1  18.1 
pycparser   2.19    2.19 
python-dateutil 2.7.3   2.7.3 
requests    2.19.1  2.19.1 
requests-oauthlib   1.0.0   1.0.0 
setuptools  39.1.0  40.4.3 

请您参考如下方法:

这是一个日志警告,告诉你这个包还没有准备好支持异步语法,这是真的,我们在 msrest 0.6.0 中发布了运行时的第一部分,但我们没有发布任何包异步支持。

作为引用,它只是一个警告: https://github.com/Azure/msrest-for-python/blob/master/msrest/async_paging.py#L40

它不会影响任何代码,也不会引发任何异常。仅当您尝试使用异步语法的 async for 时才会遇到问题(因为警告告诉您,它还没有准备好)。

当我们在今年年底开始运送异步兼容包时,随着越来越多的包准备就绪,此警告将自动消失。

如果此警告对您来说确实是个问题,您可以禁用记录器“msrest.async_paging”或将 msrest 固定为 0.5.5(在异步核心支持之前)。

如果您觉得这确实是一个大问题,请随时在我们的跟踪器上提出问题,并且根据我收到不良反馈的人数,我可能会将其更改为调试几个月.但是一旦发布异步包,它将成为一个重要的反馈来源,我真的认为它值得一个警告。 https://github.com/Azure/azure-sdk-for-python/issues

感谢您的反馈!

(我在 Microsoft 拥有此代码)。

编辑:由于您不是唯一对此有疑问的人,我发布了一个 0.6.1 版本来删除此警告。