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

通过Azure DevOps部署Azure Python Function App时无法导入包

问题:Python函数应用部署到生产环境后函数不显示,依赖模块无法导入

问题背景

本地及VS Code部署的Python Function App运行正常,但部署到高级计划+集成虚拟网络的生产环境Function App时出现异常:部署成功但函数列表不显示,日志提示“Http触发器同步失败”,所有依赖模块无法导入。

部署环境差异

  • 开发环境:无服务器架构,未集成VNet,通过VS Code右键菜单>部署到Function App完成部署
  • 生产环境:高级计划(Premium Plan),已集成虚拟网络,通过Azure DevOps流水线部署

流水线配置(Build+Deploy阶段)

trigger:
- none

variables:
  # Azure Resource Manager connection created during pipeline creation
  azureServiceConnectionId: '******'

  # Web app name
  webAppName: '*******'

  # Agent VM image name
  vmImageName: 'ubuntu-latest'

  # Environment name
  environmentName: 'PROD'

  # Project root folder. Point to the folder containing manage.py file.
  projectRoot: $(System.DefaultWorkingDirectory)

  # Resource group
  resourceGroupName : '********'

  # Python version: 3.11
  pythonVersion: '3.11'

stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: BuildJob
    pool: Default
    steps:
    - script: |
        pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
      workingDirectory: $(projectRoot)
      displayName: "Install requirements"

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

    - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
      displayName: 'Upload package'
      artifact: drop

- stage: Deploy
  displayName: 'Deploy Web App'
  dependsOn: Build
  condition: succeeded()
  jobs:
  - deployment: DeploymentJob
    pool: Default
    environment: $(environmentName)
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureFunctionApp@2
            displayName: 'Deploy Azure Web App'
            inputs:
              connectedServiceNameARM: '$(azureServiceConnectionId)'
              appType: 'functionAppLinux'
              appName: '$(webAppName)'
              package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
              runtimeStack: 'PYTHON|3.11'
              appSettings: '-KeyvaultURL ***** -StorageaccountURL *****'
              deploymentMethod: 'auto'

额外尝试的部署方式(Azure CLI)

- task: AzureCLI@2
  displayName: 'Deploy with Azure CLI'
  inputs:
    azureSubscription: '$(azureServiceConnectionId)'
    scriptType: 'pscore'
    scriptLocation: 'inlineScript'
    inlineScript: |
      $artifactPath = "$(Pipeline.Workspace)/drop/$(Build.BuildId).zip"
      az functionapp deployment source config-zip -g $(resourceGroupName) -n $(webAppName) --src $artifactPath --verbose

问题现象

两种部署方式均显示部署成功,但函数不显示;日志显示:

  • Http触发器同步失败
  • 依赖模块无法导入(尽管日志确认包存在于路径/home/site/wwwroot/.python_packages/lib/site-packages/pandas/)

已尝试的解决方法

  • 调整流水线中ENABLE_ORYX_BUILD和SCM_DO_BUILD_DURING_DEPLOYMENT的组合配置
  • 切换使用zipDeploy和package部署类型

解决方案建议

1. 确保依赖包的跨平台兼容性

在Build阶段安装依赖时,指定Linux平台的二进制包,避免本地(Windows/macOS)安装的包无法在Linux环境运行:

pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt --platform manylinux2014_x86_64 --only-binary=:all:

2. 配置Python路径应用设置

在生产环境Function App的应用设置中添加:

  • PYTHONPATH: /home/site/wwwroot:/home/site/wwwroot/.python_packages/lib/site-packages
    确保Python解释器能识别依赖模块的存放路径。

3. 禁用自动构建流程

在流水线的AzureFunctionApp@2任务中添加应用设置,跳过Oryx自动构建:

appSettings: '-KeyvaultURL ***** -StorageaccountURL ***** -ENABLE_ORYX_BUILD false -SCM_DO_BUILD_DURING_DEPLOYMENT false'

预构建已在Build阶段完成,避免Oryx覆盖或修改已安装的依赖。

4. 检查虚拟网络出站规则

确认生产环境Function App所在子网允许以下出站访问:

  • Azure存储账户(函数需访问存储同步触发器)
  • 必要的Azure内部服务端点

5. 验证文件权限

登录Kudu控制台,检查依赖目录权限,确保Python进程可读取:

ls -la /home/site/wwwroot/.python_packages/lib/site-packages/

若权限不足,执行:

chmod -R 755 /home/site/wwwroot/.python_packages/

6. 核对运行时版本

确认生产环境Function App的Python运行时版本为3.11,与流水线指定的runtimeStack: 'PYTHON|3.11'完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:08:11