Azure Web App自定义部署脚本中pip安装Flask依赖的问题
解决Azure自定义部署脚本中Flask依赖安装问题
问题背景
将Flask Web应用从本地Git仓库推送到Azure时,配置了.deployment文件指向scripts/deploy.sh脚本,脚本负责执行npm run build并复制构建产物到静态文件夹。但遇到以下问题:
- 根目录放置的
requirements.txt未触发自动pip install -r requirements.txt,推测自定义部署脚本覆盖了Azure默认构建逻辑 - 在脚本中显式调用
pip install时,报错scripts/deploy.sh: line 20: pip: command not found - 应用启动日志显示虚拟环境路径为
/tmp/8dc4df81676606a/antenv/lib/python3.10/site-packages,但依赖(如dotenv)未被安装 - 尝试将依赖改为
python3-dotenv或设置SCM_DO_BUILD_DURING_DEPLOYMENT均未解决问题
核心原因
Azure部署Python应用时会创建独立虚拟环境(默认名为antenv),自定义部署脚本默认不会激活该环境,直接调用pip会找不到命令;同时,使用自定义脚本后,Azure的默认依赖安装流程会被跳过,必须手动在脚本中处理。
解决方案
在自定义deploy.sh脚本中,明确激活虚拟环境或直接调用虚拟环境内的pip路径来安装依赖。
方法1:激活虚拟环境后执行pip安装
修改scripts/deploy.sh,添加以下步骤:
# 切换到部署根目录(Azure提供的环境变量,指向仓库部署目录) cd "$DEPLOYMENT_TARGET" # 激活虚拟环境(antenv是Azure默认创建的虚拟环境名称) if [ -f "./antenv/bin/activate" ]; then source ./antenv/bin/activate fi # 安装Python依赖 pip install -r requirements.txt # 继续执行原有脚本逻辑(npm构建等) npm run build # ... 其他复制静态文件的命令
方法2:直接调用虚拟环境内的pip绝对路径
如果激活环境有问题,可直接指定虚拟环境中的pip路径:
cd "$DEPLOYMENT_TARGET" # 定义虚拟环境的pip路径 VENV_PIP="./antenv/bin/pip" # 检查路径是否存在,若不存在则尝试临时目录下的虚拟环境(适用于临时部署目录场景) if [ ! -f "$VENV_PIP" ]; then VENV_PIP="/tmp/$(basename $DEPLOYMENT_TARGET)/antenv/bin/pip" fi # 执行依赖安装 $VENV_PIP install -r requirements.txt # 原有脚本逻辑 npm run build # ... 其他命令
验证要点
- 重新推送代码到Azure,查看部署日志,确认出现
pip install的执行记录 - 应用启动后,检查日志是否不再出现
ModuleNotFoundError
内容的提问来源于stack exchange,提问作者Robert Sim
相关产品推荐
相关产品推荐

