# Python Appservice Deploy

Deploy Python (Flask/Django/FastAPI) code to Azure App Service Linux.

- Repository: https://github.com/microsoft/azure-skills (1609 stars)
- Category: DevOps
- License: MIT
- Last updated: 2026-10-30
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add microsoft/azure-skills --skill python-appservice-deploy -g -a claude-code -y`
Codex: `npx skills add microsoft/azure-skills --skill python-appservice-deploy -g -a codex -y`
Cursor: `npx skills add microsoft/azure-skills --skill python-appservice-deploy -g -a cursor -y`
Gemini CLI: `npx skills add microsoft/azure-skills --skill python-appservice-deploy -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add microsoft/azure-skills`

## Description

Deploy Python (Flask/Django/FastAPI) code to Azure App Service Linux. WHEN: \"Flask App Service\", \"Django App Service\", \"FastAPI App Service\", \"deploy Python to App Service\". DO NOT USE FOR: Container Apps, Functions, non-Python, Terraform/Bicep/IaC, full infra, use azure-prepare.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Python on Azure App Service, Code Deploy

Deploys Python (Flask, Django, FastAPI, generic) code to Azure App Service Linux (P0v3, Python 3.14). Creates RG + Plan + Web App if missing. Hand off to `azure-prepare` for VNet, Key Vault, databases, or IaC.

**MCP tools used**: `mcp_azure_mcp_subscription_list`, `mcp_azure_mcp_group_list`, `mcp_azure_mcp_appservice`, `mcp_azure_mcp_azd` (when `azure.yaml` is present).

## Workflow

1. **Resolve context, smart defaults, minimal prompts.** Only the app name is interactive; RG (`<app>-rg`), Plan (`<app>-plan`), region (current `az` default or `eastus2`), subscription are derived. [create-app.md](references/create-app.md) §1.
2. **Detect framework** (advisory, never blocks). [detect.md](references/detect.md).
3. **Choose path**, `azure.yaml` host: appservice → [deploy-azd.md](references/deploy-azd.md); else [deploy-azcli.md](references/deploy-azcli.md).
4. **Ensure RG → Plan (`P0v3 --is-linux`) → Web App (`--runtime "PYTHON:3.14"`)** exist. On transient ARM errors, follow [transient-retry.md](references/transient-retry.md). [create-app.md](references/create-app.md).
5. **Set startup**, Flask/Django: none (Oryx auto-detects). FastAPI: always `python -m uvicorn main:app --host 0.0.0.0`. Other: warn. [startup-commands.md](references/startup-commands.md).
6. **Set `SCM_DO_BUILD_DURING_DEPLOYMENT=true`**.
7. **Deploy**, `azd deploy` or `az webapp deploy --type zip --track-status false`.
8. **STOP. Print the post-deploy message** ([post-deploy-message.md](references/post-deploy-message.md)) and end the turn.

### Hard rules

The rest: https://github.com/microsoft/azure-skills/blob/HEAD/.github/plugins/azure-skills/skills/python-appservice-deploy/SKILL.md
