You need to enable JavaScript to run this app. Azure Web App配置Python3.8后部署仍调用Python3.5如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Azure Web App配置Python3.8后部署仍调用Python3.5如何解决

问题属性判定

该问题是Azure Linux App Service平台的已知设计逻辑差异,不属于配置错误:

  • 你在门户、管道任务中配置的PYTHON|3.8运行时栈,仅作用于Web应用的业务进程(即承载Django服务的gunicorn进程),与Kudu(SCM管理组件)的运行环境完全隔离。
  • Kudu作为平台预装的管理服务,自身固定使用系统镜像自带的Python 2.7、Python 3.5作为内置运行时,不会自动继承你为业务应用配置的Python版本。
  • 你通过SSH登录时能正常使用Python3.8,是因为SSH会话会自动加载Web应用的业务环境变量,将配置的Python路径注入PATH优先级最前端;但管道中嵌入的Inline Script是直接交由Kudu执行的,不会加载这套业务环境变量,因此脚本里调用的python3自然会命中Kudu自带的Python3.5。
  • 日志中找不到django==3.1.4的报错属于必然结果:Django 3.1版本最低要求Python 3.7环境,Python 3.5的pip索引中不存在对应版本的安装包。
落地方案

按照优先级从高到低排列:

方案一(推荐,稳定性最高)

将依赖安装逻辑从部署后脚本挪到CI构建阶段完成,从根源绕开Kudu的环境问题:

  • 在构建流水线中,启用和线上一致的Python 3.8任务,在应用代码目录下创建名为antenv的虚拟环境。
  • 用该虚拟环境的pip安装requirements.txt中的所有依赖,再将整个应用目录(包含antenv虚拟环境)一起打包为部署制品。
  • 部署时直接上传制品即可,不需要再在部署任务中配置任何依赖安装脚本,平台启动时会自动识别antenv虚拟环境并启动服务。

方案二(需保留部署后装依赖场景的适配)

调整Inline Script内容,显式指定Python 3.8的绝对路径,绕过PATH默认匹配到的老版本Python:
Azure Linux App Service上预装的Python 3.8固定存放在/opt/python/目录下,无需依赖系统PATH查找,调整后的脚本参考如下:

echo "自动匹配Python 3.8路径"
PYTHON38=$(ls /opt/python/3.8*/bin/python3 | tail -n 1)
echo "当前使用的Python版本:"
$PYTHON38 --version
echo "升级pip"
$PYTHON38 -m pip install --upgrade pip
echo "安装项目依赖"
$PYTHON38 -m pip install -r xxx/requirements.txt

关键注意事项

  • 禁止在脚本中直接调用/usr/bin/python3,该路径永远指向系统镜像内置的Python3.5,和你配置的业务运行时完全无关。
  • 日志中出现的Defaulting to user installation because normal site-packages is not writeable提示,是错用系统Python路径导致的权限异常,换用正确的Python3.8路径后会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 14:45:04