使用GitHub Actions部署Python应用至Azure App Service遇pyodbc缺失问题
GitHub Actions部署Python应用到Azure App Service后pyodbc模块缺失问题解决
问题背景
通过GitHub Actions将Python Web应用部署到Azure App Service,应用需连接Azure SQL后端查询数据。已配置secrets.AZURE_WEBAPP_PUBLISH_PROFILE密钥,相关配置如下:
仓库结构
/python-app$ . ├── app │ ├── app.py │ ├── requirements.txt │ ├── static │ │ └── styles.css │ └── templates │ ├── index.html │ └── welcome.html ├── terraform-infra
原GitHub Actions流水线
name: Build and Deploy Python App to Azure Web App on: push: branches: - main workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python version uses: actions/setup-python@v5 with: python-version: '3.12' - name: Install unixodbc run: sudo apt-get install -y unixodbc - name: Create and activate virtual environment run: | python -m venv venv source venv/bin/activate - name: Install dependencies run: pip install -r app/requirements.txt - name: Compress artifact for deployment run: zip release.zip ./app/* -r - name: Upload artifact for deployment jobs uses: actions/upload-artifact@v4 with: name: python-app path: | release.zip !venv/ deploy: runs-on: ubuntu-latest needs: build environment: name: 'Production' url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} steps: - name: Download artifact from build job uses: actions/download-artifact@v4 with: name: python-app - name: Unzip artifact for deployment run: | unzip release.zip mv app/* . - name: 'Deploy to Azure Web App' uses: azure/webapps-deploy@v3 id: deploy-to-webapp with: app-name: 'python-app-mario' slot-name: 'production' publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
requirements.txt内容
bcrypt==4.2.0 blinker==1.8.2 click==8.1.7 Flask==3.0.3 itsdangerous==2.2.0 Jinja2==3.1.4 MarkupSafe==2.1.5 pyodbc==5.1.0 Werkzeug==3.0.4
app.py数据库连接代码
database = os.getenv("database") password = os.getenv("password") server = os.getenv("server") user = os.getenv("user") driver= '{ODBC Driver 17 for SQL Server}' # Connecting to SQL server conexion = pyodbc.connect(f"DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password}")
错误现象
部署后访问应用出现Application Error,日志显示核心错误:
ModuleNotFoundError: No module named 'pyodbc'
已尝试在构建阶段安装pyodbc和unixodbc,也用过Azure提供的默认流水线,问题未解决。
解决方案
通过以下两步修复问题:
- 调整依赖安装路径
将依赖安装到应用目录内的.python_packages/lib/site-packages文件夹,确保部署包包含所有Python依赖。修改后的构建阶段依赖安装步骤如下:
- name: Install dependencies run: pip install --target="./.python_packages/lib/site-packages" -r requirements.txt working-directory: ./app
- 启用Azure部署时构建
在Terraform基础设施配置文件中添加环境变量:
SCM_DO_BUILD_DURING_DEPLOYMENT = 1
此配置确保Azure App Service在部署期间执行构建流程,正确识别并加载安装的依赖包。
内容的提问来源于stack exchange,提问作者Mario SFdez
相关产品推荐
相关产品推荐

