Azure Web App部署Python Flask应用:虚拟环境依赖丢失问题排查
问题分析与解决方案
明显错误点
构建阶段在构建代理机器上创建的antenv虚拟环境,默认不会被打包上传到Azure Web App。Azure Web App的部署流程只会同步你的应用代码文件,代理机器上生成的虚拟环境目录不会自动纳入部署包——这就是为什么SSH中激活的虚拟环境里看不到构建阶段安装的依赖,即使你后来手动确认venv文件夹存在,那也是Web App侧自动生成的空环境,不是构建时的那个。
排查与修复建议
- 检查部署包内容
确认构建后的部署包是否包含antenv目录。不管用Azure DevOps还是GitHub Actions,都需要在打包步骤中明确配置将antenv加入到部署归档文件里,否则这个目录不会被传到Web App服务器。 - 调整构建脚本逻辑
不需要在构建阶段创建虚拟环境,Azure Web App的Python运行时会自动处理:- 确保
requirements.txt放在项目根目录 - Web App会自动检测到该文件,创建默认的
antenv虚拟环境并安装所有依赖,无需手动在构建脚本中执行python -m venv和pip install
- 确保
- 修正
--target参数的使用方式
如果你用pip install --target="./.python_packages/lib/site-packages"安装依赖,这个目录是Web App的全局依赖目录,虚拟环境不会自动识别这里的包。若要使用此方式,需在Web App的应用设置中添加PYTHONPATH环境变量,值设为/home/site/.python_packages/lib/site-packages(Linux)或D:\home\site\.python_packages\lib\site-packages(Windows),而非依赖虚拟环境。 - SSH环境验证步骤
- 激活虚拟环境后,执行
which pip和which python,确认输出路径是antenv/bin下的可执行文件,避免误用到系统级的pip/python - 直接查看
antenv/lib/python3.11/site-packages目录(对应你的Python版本),确认目标依赖包的文件是否存在 - 执行
pip freeze替代pip list,对比输出内容,排除显示差异问题 - 检查Web App的应用设置,确认没有
WEBSITE_VIRTUAL_APPS等配置干扰虚拟环境的路径识别
- 激活虚拟环境后,执行
内容的提问来源于stack exchange,提问作者jocke45
相关产品推荐
相关产品推荐

