【Azure Function App】升级 Python 运行时 3.9 到3.10 后遇见的问题

简介: Azure Functions 升级 Python 3.9→3.10 时,仅改 Portal 配置易致故障:一是复用旧版依赖引发加载超时(Exit 137);二是 typing_extensions 与实际运行时(如 3.13)不兼容,抛 AttributeError。须重装依赖、锁定 typing_extensions≥4.12,并验证真实 Python 版本。

问题描述

Azure Function 原来运行在 Python 3.9。由于 Python 3.9 即将停止维护,需要升级到 Python 3.10。

第一次升级时,只是在 Function App 页面中进入Settings → Configuration → General settings,将 Python 版本从 3.9 修改为 3.10。

Function App 表面上可以正常启动,但绑定的 Service Bus topic-subscription 消息不再被正常消费。

观察到的主要错误如下:

Loading function failed. ExceptionType: System.TimeoutException
Timeout value of 00:30:00 exceeded by function 'Functions.func1'
Executed 'Functions.func1' (Failed, Duration=1800022ms)
Message processing error (Action=ProcessMessageCallback, EntityPath=<topic-name>/Subscriptions/<subscription-name>)

后台日志中还可以看到 Python Worker 被强制终止:

The process with PID XXXX (language worker) was forcefully terminated.
Exit code: 137 (SIGKILL)

之后重新部署了新的 package,但消息仍然无法消费。这次错误变成了函数加载阶段立即失败:

[Error] Executed 'Functions.func1' (Failed, Duration=1ms)
Exception: AttributeError: attribute '__default__' of 'typing.ParamSpec' objects is not writable

堆栈中可以看到错误发生在导入azure.storage.blob的过程中,最终落到typing_extensions.py:

File ".../azure/storage/blob/_blob_client.py", line 22, in <module>
    from azure.core.tracing.decorator import distributed_trace
File ".../azure/core/tracing/decorator.py", line 37, in <module>
    P = ParamSpec("P")
File ".../typing_extensions.py", line 1474, in _set_default
    type_param.__default__ = None
AttributeError: attribute '__default__' of 'typing.ParamSpec' objects is not writable

问题解答

这次问题主要分成两个阶段。

1. 只修改 Function App 运行时版本,依赖包没有重新构建

第一个错误的重点是:

System.TimeoutException
Duration=1800022ms
exit code 137 / SIGKILL

这说明函数并不是业务代码执行慢,而是在 Worker 加载函数时卡住,最终被 Host 强制终止。

常见原因是应用使用WEBSITE_RUN_FROM_PACKAGE方式部署,zip 包中的 Python 依赖是在旧的 Python 3.9 环境下安装或编译的。

只在 Portal 中把运行时改成 Python 3.10 后,云端解释器变成了 3.10,但包里的原生依赖仍可能是 3.9 的构建产物,例如grpcio、protobuf、cryptography等,从而导致函数加载异常或超时。

建议处理方式:

  • 在本地准备目标 Python 版本环境,例如 Python 3.10。
  • 删除旧依赖包,不复用 Python 3.9 环境下生成的 package。
  • 在 Python 3.10 环境下重新安装依赖:
pip install --upgrade pip
pip install -r requirements.txt
  • 重新打包并部署。

2.typing_extensions与实际 Python 运行时不兼容

第二个错误的重点是:

AttributeError: attribute '__default__' of 'typing.ParamSpec' objects is not writable

如果堆栈中出现类似下面的路径:

/azure-functions-host/workers/python/3.13/...

说明当前实际运行环境可能涉及 Python 3.13。旧版typing_extensions与 Python 3.13 中typing.ParamSpec.__default__的行为不兼容,可能在导入azure.storage.blob、azure.core.tracing.decorator等依赖时直接失败。

建议处理方式:

  • 在requirements.txt中显式指定较新的typing_extensions版本:
typing_extensions>=4.12.0
  • 重新安装依赖并重新打包:
pip install --upgrade pip
pip install -r requirements.txt
  • 部署后检查 Function App 实际 Python 运行时版本,确认它和预期一致。
  • 如果目标是 Python 3.10,需要确认配置没有实际运行到 Python 3.13。
  • 再次验证函数是否可以正常加载,以及 Service Bus topic-subscription 中的消息是否可以正常消费

总结

Azure Functions 升级 Python 运行时时,不建议只在 Portal 中修改 Python 版本。

更稳妥的顺序是:

准备目标 Python 版本环境
→ 重新安装依赖
→ 重新打包
→ 部署到 Staging Slot 验证
→ 确认实际运行时版本
→ Swap 到生产环境

这次排查中,两个关键点分别是:

  • System.TimeoutException、Duration=1800022ms、exit code 137:优先检查是否复用了旧 Python 版本构建出来的依赖包。
  • AttributeError: attribute '__default__' of 'typing.ParamSpec' objects is not writable:优先检查typing_extensions版本,以及实际运行的 Python 版本是否符合预期。

参考资料

更新 Azure Functions 中的语言堆叠版本 :https://docs.azure.cn/zh-cn/azure-functions/update-language-versions?tabs=azure-portal%2Clinux&pivots=programming-language-python

attribute '__default__' of 'typing.ParamSpec' objects is not writableon Python 3.13 :https://github.com/python/typing_extensions/issues/404

相关文章
|
4月前
|
人工智能 前端开发 物联网
历史科普视频的AI自动化生产工作流:从全手动到半自动的工程演进
本文量化历史科普视频制作瓶颈,对比全手动(Stable Diffusion/GPT-SoVITS/Manim等开源栈)与半自动(花生AI为核心)方案。实测混合工作流将单期耗时从29–49小时压缩至10–15小时,效率提升60%+,兼顾质量、可控性与落地性。
|
4月前
|
消息中间件 Linux Docker
Windows Docker Desktop 环境下 RabbitMQ 生产级部署完整指南
本文详解Windows下基于Docker Desktop部署RabbitMQ的标准化方案:避开Erlang配置痛点,推荐`rabbitmq:3.13-management-alpine`镜像;涵盖极简测试、持久化部署(必设`--hostname`)、自定义配置三类方案,并重点梳理Windows特有坑点(BOM编码、CRLF换行、guest远程限制等),助力快速搭建稳定本地开发环境。
488 7
|
4月前
|
弹性计算 安全 Linux
2026年阿里云服务器选型与网站部署全攻略:从服务器选型、配置到上线一站式指南
2026年阿里云服务器生态已形成轻量应用服务器与ECS云服务器两大核心体系,适配个人博客、企业官网、电商平台、应用开发等全场景建站需求。本文从服务器选型、配置选择、网站部署全流程、安全与运维优化四大维度,提供2026年最新实操指南,帮助用户精准选型、高效建站、稳定上线。
894 3
|
4月前
|
人工智能 IDE API
阿里云百炼 Coding Plan 深度解析:核心功能、接入配置与省钱订阅指南
阿里云百炼Coding Plan是专为AI编程场景打造的订阅制服务,以固定月费提供定额调用额度,聚合多模型能力并兼容主流开发工具,解决按量计费成本不可控、多模型切换繁琐等痛点。2026年该服务完成版本迭代,Lite基础版停售,仅保留Pro高级版,以下从核心功能、套餐配置、接入实操、省钱策略四大维度全面解析,帮助开发者高效选型与使用。
1020 2
|
2月前
|
存储 关系型数据库 MySQL
读写混合TPS差六倍,PostgreSQL与MySQL架构差异实测
从架构设计、索引实现、事务隔离、复制机制、运维体验五个维度深度对比PostgreSQL与MySQL,覆盖MySQL 9.0向量检索与PostgreSQL 17新特性,附权威基准数据和选型决策框架
|
6月前
|
运维 BI API
企业Agent落地真相:多模型不是可选是必然
企业Agent落地关键不在“能否实现”,而在“能否稳定、可控、可持续”。真实业务链路天然需多模型协同:高阶推理、长文档处理、轻量任务各有所需。单模型易致成本高、弹性差、治理难。建议按任务分层选模,并构建统一接入与治理层,方能兼顾性能、成本与可运维性。
359 8
|
6月前
|
缓存 安全 iOS开发
开源的 macOS 应用管理器和系统清理器
PureMac 是一款免费开源的 macOS 应用管理与系统清理工具,支持彻底卸载应用、清除残留文件及缓存日志等垃圾,释放磁盘空间。无订阅、无遥测、不收集任何用户数据,原生安全,智能扫描不误删。(239字)
592 1
|
7月前
|
传感器 算法 安全
AR 眼镜多模态融合:视觉、语音与 IMU 的端侧协同实践
本文介绍AR眼镜端侧多模态融合方案,通过视觉、语音与IMU协同,解决工业场景中强光、噪声、漂移等挑战;采用硬件触发同步、动态加权融合与INT8量化优化,实现≤15ms低延时、91%高识别率及22%功耗降低,已在五矿盐湖项目落地验证。
717 0
|
9月前
|
人工智能 Kubernetes 数据可视化
别再写"面条式文档"了!用AI给你的思维装个"图形渲染引擎"
别让线性文字限制了你的高维思考。本文揭示了大脑作为"图形处理器"的本质,提供了一套专业的AI指令,将复杂的逻辑思维"序列化"为清晰的拓扑结构,像渲染DOM树一样可视化你的知识体系,极大提升沟通与学习效率。
817 12
|
缓存 Java 关系型数据库
【Java面试题汇总】ElasticSearch篇(2023版)
倒排索引、MySQL和ES一致性、ES近实时、ES集群的节点、分片、搭建、脑裂、调优。
【Java面试题汇总】ElasticSearch篇(2023版)