Azure Web App部署Python3.11 Django项目遇启动错误求助
解决Azure Web App(Python 3.11)部署Django的启动错误问题
问题回顾
部署Python 3.11的Azure Web App(Debian系统,Code发布模式)时遇到两类错误:
- 首次部署Oryx误判为Flask应用,启动时出现:
[Errno 2] No such file or directory: '/etc/runit/runsvdir/default/ssh/log/supervise' - 调整文件夹结构后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
相关产品推荐
相关产品推荐

