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

Azure Web App部署Python3.11 Django项目遇启动错误求助

解决Azure Web App(Python 3.11)部署Django的启动错误问题

问题回顾

部署Python 3.11的Azure Web App(Debian系统,Code发布模式)时遇到两类错误:

  1. 首次部署Oryx误判为Flask应用,启动时出现:[Errno 2] No such file or directory: '/etc/runit/runsvdir/default/ssh/log/supervise'
  2. 调整文件夹结构后Oryx正确识别Django,但启动时抛出:ModuleNotFoundError: No module named 'django'

解决方案

1. 确保Oryx正确识别Django的文件夹结构

Oryx通过根目录下的manage.py识别Django应用,需满足以下任一条件:

  • 将manage.py放在ZIP包的根目录(打包时直接压缩项目根目录内容,而非外层文件夹)
  • 若manage.py在子目录(如my_project/manage.py),需手动指定启动命令,跳过自动识别逻辑

2. 调整环境变量,让Oryx正确处理依赖与虚拟环境

当前设置的ENABLE_ORYX_BUILD: False会阻止Oryx自动安装依赖,建议调整环境变量:

  • 保留 SCM_DO_BUILD_DURING_DEPLOYMENT: True
  • 设置 ENABLE_ORYX_BUILD: True
  • 保留 DISABLE_COLLECTSTATIC: True(若无需收集静态文件)
  • 移除 CREATE_PACKAGE: False(使用Oryx默认打包逻辑)

调整后,Oryx会自动创建虚拟环境并安装requirements.txt中的所有依赖。

3. 确保依赖包与Python 3.11兼容

针对推测的兼容问题,需在requirements.txt中指定兼容版本:

  • Gunicorn:要求版本≥20.1.0(该版本及以上支持Python 3.11),添加行:gunicorn>=20.1.0
  • Whitenoise:要求版本≥6.0(支持Python 3.11),添加行:whitenoise>=6.0

4. 手动指定启动命令(自动识别失效时)

若Oryx仍无法正确启动Django,可在Azure Web App的「配置-常规设置」中设置自定义启动命令:

gunicorn --bind=0.0.0.0 --timeout 600 <你的项目名称>.wsgi

替换<你的项目名称>为Django项目中包含wsgi.py的文件夹名。

也可创建startup.sh脚本放置在项目根目录,内容如下:

source /home/site/wwwroot/antenv/bin/activate
pip install -r requirements.txt
gunicorn --bind=0.0.0.0 --timeout 600 <你的项目名称>.wsgi

然后将启动命令设置为./startup.sh。

5. 关于ssh/log/supervise错误的说明

该错误是Web App尝试启动SSH服务时的路径异常,并非Django部署的核心问题。当Oryx正确识别Django应用并执行正确的启动流程后,此错误会自动消失,无需单独处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:13:29