Function App从v2升级到v4后本地运行出现ImportError求助
将Azure Function App从v2版本升级到v4版本后,在VS Code的venv环境中执行命令func host start --verbose时,出现以下错误:
Result: Failure Exception: ImportError: cannot import name 'HTTPFailure' from 'azure.cosmos.errors'
已尝试升级azure-cosmos到4.4.0版本,但问题未解决,已知azure.cosmos.errors模块已被弃用,但不确定是否与此问题直接相关。
已安装的pip包列表如下:
Package Version ------------------------------------- --------- adal 1.2.7 asn1crypto 1.5.1 astroid 2.15.6 azure-common 1.1.28 azure-core 1.28.0 azure-cosmos 4.4.0 azure-functions 1.15.0 azure-functions-worker 1.1.9 azure-keyvault 4.2.0 azure-keyvault-certificates 4.7.0 azure-keyvault-keys 4.8.0 azure-keyvault-secrets 4.7.0 azure-mgmt-advisor 9.0.0 azure-mgmt-applicationinsights 4.0.0 azure-mgmt-authorization 4.0.0 azure-mgmt-batch 17.1.0 azure-mgmt-batchai 2.0.0 azure-mgmt-billing 6.0.0 azure-mgmt-cdn 12.0.0 azure-mgmt-cognitiveservices 13.5.0 azure-mgmt-commerce 6.0.0 azure-mgmt-compute 30.1.0 azure-mgmt-consumption 10.0.0 azure-mgmt-containerinstance 10.1.0 azure-mgmt-containerregistry 10.1.0 azure-mgmt-containerservice 25.0.0 azure-mgmt-core 1.4.0 azure-mgmt-cosmosdb 9.2.0 azure-mgmt-datafactory 3.1.0 azure-mgmt-datalake-analytics 0.6.0 azure-mgmt-datalake-nspkg 3.0.1 azure-mgmt-datalake-store 0.5.0 azure-mgmt-datamigration 10.0.0 azure-mgmt-devspaces 0.2.0 azure-mgmt-devtestlabs 9.0.0 azure-mgmt-dns 8.1.0 azure-mgmt-eventgrid 10.2.0 azure-mgmt-eventhub 11.0.0 azure-mgmt-hanaonazure 1.0.0 azure-mgmt-iotcentral 9.0.0 azure-mgmt-iothub 2.4.0 azure-mgmt-iothubprovisioningservices 1.1.0 azure-mgmt-keyvault 10.2.3 azure-mgmt-loganalytics 12.0.0 azure-mgmt-logic 10.0.0 azure-mgmt-machinelearningcompute 0.4.1 azure-mgmt-managementgroups 1.0.0 azure-mgmt-managementpartner 1.0.0 azure-mgmt-maps 2.0.0 azure-mgmt-marketplaceordering 1.1.0 azure-mgmt-media 10.2.0 azure-mgmt-monitor 6.0.1 azure-mgmt-msi 7.0.0 azure-mgmt-network 24.0.0 azure-mgmt-notificationhubs 8.0.0 azure-mgmt-nspkg 3.0.2 azure-mgmt-policyinsights 1.0.0 azure-mgmt-powerbiembedded 2.0.0 azure-mgmt-rdbms 10.1.0 azure-mgmt-recoveryservices 2.4.0 azure-mgmt-recoveryservicesbackup 6.0.0 azure-mgmt-redis 14.2.0 azure-mgmt-relay 1.1.0 azure-mgmt-reservations 2.3.0 azure-mgmt-resource 23.0.1 azure-mgmt-scheduler 2.0.0 azure-mgmt-search 9.0.0 azure-mgmt-servicebus 8.2.0 azure-mgmt-servicefabric 2.0.0 azure-mgmt-signalr 1.2.0 azure-mgmt-sql 3.0.1 azure-mgmt-storage 21.0.0 azure-mgmt-subscription 3.1.1 azure-mgmt-trafficmanager 1.1.0 azure-mgmt-web 7.1.0 azure-nspkg 3.0.2 azure-storage-blob 12.17.0 azure-storage-common 2.1.0 cachetools 5.3.1 certifi 2023.7.22 cffi 1.15.1 chardet 5.1.0 charset-normalizer 3.2.0 colorama 0.4.6 coverage 7.2.7 cryptography 41.0.2 decorator 5.1.1 dill 0.3.7 exceptiongroup 1.1.2 grpcio 1.33.2 grpcio-tools 1.33.2 idna 3.4 iniconfig 2.0.0 isodate 0.6.1 isort 5.12.0 Jinja2 2.10 lazy-object-proxy 1.9.0 MarkupSafe 2.0.0 mccabe 0.7.0 msrest 0.7.1 msrestazure 0.6.4 oauthlib 3.2.2 packaging 23.1 pip 23.2.1 pipdeptree 2.12.0 platformdirs 3.9.1 pluggy 1.2.0 protobuf 3.6.1 ptvsd 4.3.2 py 1.11.0 pycparser 2.21 PyJWT 2.8.0 pylint 2.17.4 pytest 7.4.0 pytest-cov 4.1.0 python-dateutil 2.8.2 python-dotenv 1.0.0 python-http-client 3.3.7 pytz 2023.3 requests 2.31.0 requests-oauthlib 1.3.1 retry 0.9.2 sendgrid 6.10.0 setuptools 58.1.0 six 1.12.0 starkbank-ecdsa 2.2.0 tomli 2.0.1 tomlkit 0.11.8 typed-ast 1.5.5 typing_extensions 4.7.1 urllib3 2.0.4
1. 替换代码中的错误引用模块
azure-cosmos v4.x版本已完全重构错误处理体系,原azure.cosmos.errors模块已被弃用,其中的HTTPFailure类已迁移至azure.cosmos.exceptions模块,替换为CosmosHttpResponseError(对应HTTP请求错误场景)。
- 找到代码中所有类似如下的导入语句:
from azure.cosmos.errors import HTTPFailure - 替换为:
from azure.cosmos.exceptions import CosmosHttpResponseError - 同时修改代码中捕获异常的逻辑,例如:
# 原代码 try: # Cosmos DB操作 except HTTPFailure as e: # 错误处理 # 修改后 try: # Cosmos DB操作 except CosmosHttpResponseError as e: # 错误处理
如果需要处理其他特定错误场景,可参考azure.cosmos.exceptions下的具体异常类,比如:
CosmosResourceNotFoundError:资源不存在CosmosResourceExistsError:资源已存在CosmosAccessConditionFailedError:访问条件失败
2. 清理并重新安装依赖
执行以下命令清理旧的依赖缓存,确保azure-cosmos版本正确加载:
pip uninstall -y azure-cosmos pip install azure-cosmos==4.4.0
3. 升级Azure Functions相关依赖
确保azure-functions和azure-functions-worker版本与Function App v4 runtime兼容:
pip install --upgrade azure-functions azure-functions-worker
4. 检查依赖兼容性
确认azure-mgmt-cosmosdb版本与azure-cosmos版本适配,当前你安装的azure-mgmt-cosmosdb 9.2.0与azure-cosmos 4.4.0是兼容的,若后续仍有问题,可尝试将azure-mgmt-cosmosdb升级至最新稳定版:
pip install --upgrade azure-mgmt-cosmosdb
内容的提问来源于stack exchange,提问作者iamrhass

