You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Azure Function导入azure.identity等包后函数消失问题排查

问题描述

我有一个基于Python 3.12的Azure Function(降级到Python 3.11问题依旧),原本运行正常。但在导入azure.identity和azure.keyvault.secrets包(具体导入语句为from azure.keyvault.secrets import SecretClient、from azure.identity import DefaultAzureCredential)后,Azure Function中不再显示任何函数;移除这些导入语句后,函数恢复显示。通过requirements.txt安装这些包本身无问题,仅添加导入语句时触发该问题。

项目结构及代码配置

function_app.py

import azure.functions as func 
from http_blueprint import bp_http
from timer_blueprint import bp_timer

app = func.FunctionApp() 

app.register_functions(bp_http)
app.register_functions(bp_timer)

http_blueprint.py

import logging
import azure.functions as func

bp_http = func.Blueprint()

@bp_http.route(route="default_template")
def default_template(req: func.HttpRequest) -> func.HttpResponse:
    ...

timer_blueprint.py

import os
import requests
import logging
import datetime
import azure.functions as func
from azure.keyvault.secrets import SecretClient
from azure.identity import DefaultAzureCredential

# same issue when libaries would be imported like this
# import azure.identity
# import azure.keyvault.secrets

bp_timer = func.Blueprint()

@bp_timer.timer_trigger(schedule="0 * * * * *", 
              arg_name="mytimer",
              run_on_startup=True) 
def exec_timer(mytimer: func.TimerRequest) -> None:
    ...

azure_pipelines.yml

pool:
  vmImage: ubuntu-latest
strategy:
  matrix:
    Python312:
      python.version: '3.12'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '$(python.version)'
  displayName: 'Use Python $(python.version)'

- script: |
    python -m pip install -U pip
    python -m pip install --target="./.python_packages/lib/site-packages" --upgrade -r requirements.txt
  displayName: 'Install dependencies'

- task: ArchiveFiles@2
  displayName: 'Archive files'
  inputs:
    rootFolderOrFile: $(System.DefaultWorkingDirectory)
    includeRootFolder: false
    archiveType: zip
    archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId)-$(python.version).zip
    replaceExistingArchive: true

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: 'Deploy'
    appType: 'functionAppLinux'
    appName: 'appName'
    package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId)-$(python.version).zip'
    runtimeStack: 'PYTHON|3.12'
    deploymentMethod: 'zipDeploy'

requirements.txt

azure-functions==1.21.3
discord.py==2.5.2
discord_interactions==0.4.0
Flask==3.1.0
requests==2.32.3
azure-identity==1.21.0
azure-keyvault-secrets==4.9.0
cryptography==43.0.3
可能的原因分析
  • 导入阶段触发未捕获的身份验证异常:DefaultAzureCredential在导入时会自动尝试加载多种身份验证源(如MSI、环境变量、Azure CLI凭据等),如果Azure Function运行环境中没有配置有效的身份验证方式(比如未启用系统分配的MSI,或缺少对应的Key Vault权限),会在导入时抛出异常,导致整个函数应用初始化失败,函数无法被识别。
  • 依赖包版本冲突:azure-identity和azure-keyvault-secrets依赖的azure-core、msal等包版本,可能与azure-functions依赖的同类型包版本不兼容,引发模块加载错误,阻断函数启动流程。
  • 模块加载顺序问题:导入身份验证包的语句放在Blueprint定义之前,若导入时出错,会直接阻止Blueprint的注册,导致函数无法被发现。可以尝试将导入语句移到函数内部(比如exec_timer函数里),延迟加载避免启动时错误。
  • Linux运行时系统库缺失:Azure Functions Linux环境可能缺少azure-identity依赖的底层系统库(如libssl、libffi),即使安装了cryptography,也可能因系统库版本不匹配导致导入失败,进而影响函数加载。

内容的提问来源于stack exchange,提问作者mburm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:57:03