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

在Azure部署Streamlit+LangChain应用时遇issubclass类型错误

问题分析与解决方案

问题根源

从错误栈可以看出,核心问题是旧版Pydantic与Python 3.11的兼容性冲突:旧版Pydantic在处理TypedDict类型时,无法适配Python 3.11中typing模块的底层逻辑变化,导致issubclass()调用时传入非类对象触发错误。同时你的CI/CD配置存在依赖重复安装、虚拟环境与Azure Oryx构建流程冲突的问题,加剧了环境不一致性。

解决方案

1. 修复依赖版本,兼容Python 3.11

修改requirements.txt,明确指定兼容Python 3.11的Pydantic版本,确保LangChain依赖匹配:

langchain==0.0.225
streamlit
openai
python-dotenv
pinecone-client
streamlit-chat
chromadb
tiktoken
pymssql
typing-inspect==0.8.0
typing_extensions==4.5.0
# 添加兼容Python3.11的Pydantic版本
pydantic>=1.10.12

2. 调整CI/CD配置,消除环境冲突

修改Azure Pipeline的YAML配置,移除冗余的虚拟环境操作,适配Oryx自动构建流程:

stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: BuildJob
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: UsePythonVersion@0
      inputs:
        versionSpec: '$(pythonVersion)'
      displayName: 'Use Python $(pythonVersion)'

    - script: |
        python -m pip install --upgrade pip
        # 直接安装到目标目录,无需虚拟环境
        pip install --target="./.python_packages/lib/site-packages" -r ./requirements.txt
      workingDirectory: $(projectRoot)
      displayName: "Install requirements to target directory"

    - 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:
      vmImage: $(vmImageName)
    environment: $(environmentName)
    strategy:
      runOnce:
        deploy:
          steps:

          - task: UsePythonVersion@0
            inputs:
              versionSpec: '$(pythonVersion)'
            displayName: 'Use Python version'
        
          - task: AzureAppServiceSettings@1
            displayName: 'Set App Settings'
            inputs:
              azureSubscription: 'AzureAIPocPrincipal'
              appName: 'test'
              resourceGroupName: 'AzureAIPoc'
              appSettings: |
                [
                  {
                    "name": "ENABLE_ORYX_BUILD",
                    "value": 1
                  },
                  {
                    "name": "SCM_DO_BUILD_DURING_DEPLOYMENT",
                    "value": 1
                  }
                  # 移除POST_BUILD_COMMAND,Oryx会自动处理requirements.txt
                ]

          - task: AzureWebApp@1
            displayName: 'Deploy Azure Web App : test'
            inputs:
              azureSubscription: 'AzureAIPocPrincipal'
              appType: 'webAppLinux'
              deployToSlotOrASE: true
              resourceGroupName: 'AzureAIPoc'
              slotName: 'production'
              appName: 'test'
              package: '$(Pipeline.Workspace)/drop/$(Build.BuildId).zip'
              startUpCommand: 'python -m streamlit run app/home.py --server.port 8000 --server.address 0.0.0.0'

3. 关键调整说明

  • 移除虚拟环境操作:Azure App Service的Oryx构建流程会自动管理依赖环境,本地构建时的venv会导致部署后环境路径混乱;
  • 删除POST_BUILD_COMMAND:Oryx会自动检测requirements.txt并安装依赖,重复安装会引发版本冲突;
  • 锁定Pydantic版本:确保使用修复了Python3.11兼容性问题的Pydantic版本,避免类型处理错误。

4. 验证步骤

  1. 本地使用与Azure配置一致的Python版本运行应用,确认依赖安装正常;
  2. 重新触发CI/CD流水线,观察部署日志是否无依赖安装错误;
  3. 访问部署后的Web App,验证LangChain模块导入正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:39:49