配置本地环境以在 Azure 上部署 Python Web 应用

本文指导你设置本地环境以开发 Python Web 应用 并将其部署到 Azure。 Web 应用可以是纯 Python,也可以使用基于 Python 的常见 Web 框架之一,例如 DjangoFlaskFastAPI

本地开发的 Python Web 应用可以部署到Azure App 服务、Azure 容器应用Azure 静态Web 应用等服务。 有许多部署选项。 例如,对于App 服务部署,可以选择从代码、Docker 容器或静态 Web 应用进行部署。 如果通过代码进行部署,可以使用 Visual Studio Code、Azure CLI、本地 Git 存储库或 GitHub 操作进行部署。 如果在 Docker 容器中部署,可以从 Azure 容器注册表、Docker 中心或任何专用注册表执行此操作。

在继续阅读本文之前,建议查看 “设置开发环境 ”,以获取有关为 Python 和 Azure 设置开发环境的指导。 下面,我们将讨论特定于 Python Web 应用开发的设置和配置。

为 Python Web 应用开发设置本地环境后,即可处理以下文章:

使用 Visual Studio Code

Visual Studio Code 集成开发环境(IDE)是开发 Python Web 应用和使用 Web 应用使用的 Azure 资源的一种简单方法。

提示

确保已安装 Python 扩展。 有关在 VS Code 中使用 Python 的概述,请参阅 VS Code 中的 Python 入门。

在 VS Code 中,可以通过 VS Code 扩展使用 Azure 资源。 可以从“扩展视图”或组合键 Ctrl+Shift+X 安装扩展。 对于 Python Web 应用,你可能正在使用以下一个或多个扩展:

Visual Studio Code 中的扩展可以像在典型的 IDE 接口中一样访问,并且具有丰富的关键字 (keyword)支持,使用 VS Code 命令面板。 若要访问命令面板,请使用组合键 Ctrl+Shift+P。 命令面板是查看可以对 Azure 资源执行的所有可能操作的好方法。 以下屏幕截图显示了App 服务的一些操作。

A screenshot of the Visual Studio Code command palette for App Service.

在 Visual Studio Code 中使用开发容器

Python 开发人员通常依赖虚拟环境为特定项目创建独立且独立的环境。 虚拟环境允许开发人员为每个项目单独管理依赖项、包和 Python 版本,从而避免可能需要不同包版本的不同项目之间的冲突。

尽管 Python 中提供了用于管理环境(virtualenvvenv或)的常用选项,但 Visual Studio Code 开发容器扩展(基于开放开发容器规范)允许将 Docker 容器用作功能齐全的容器化环境。 它使开发人员能够使用预先配置的所有必要工具、依赖项和扩展来定义一致且易于重现的工具链。 这意味着,如果你有系统要求、shell 配置或完全使用其他语言,则可以使用开发容器显式配置可能位于基本 Python 环境之外的项目的所有部分。

例如,开发人员可以将单个开发容器配置为包含处理项目所需的所有内容,包括 PostgreSQL 数据库服务器以及项目数据库和示例数据、Redis 服务器、Nginx、前端代码、客户端库(如 React 等)。 此外,容器将包含项目代码、Python 运行时以及具有正确版本的所有 Python 项目依赖项。 最后,容器可以指定要安装的 Visual Studio Code 扩展,以便整个团队具有相同的工具可用。 因此,当新的开发人员加入团队时,整个环境(包括工具、依赖项和数据)已准备好克隆到本地计算机,他们可以立即开始工作。

请参阅 在容器内部进行开发。

使用 Visual Studio 2022

Visual Studio 2022 是一个功能齐全的集成开发环境(IDE),支持 Python 应用程序开发和许多内置工具和扩展来访问和部署到 Azure 资源。 虽然大多数有关在 Azure 上生成 Python Web 应用的文档都侧重于使用 Visual Studio Code,但如果已安装 Python Web 应用,则 Visual Studio 2022 是一个很好的选择,你熟悉如何使用它,并且将其用于 .NET 或 C++ 项目。

  • 一般情况下,请参阅 Visual Studio |与在 Visual Studio 2022 上使用 Python 相关的所有文档的 Python 文档

  • 有关安装步骤,请参阅 Visual Studio 中的“安装 Python 支持”,其中引导你完成将 Python 工作负载安装到 Visual Studio 2022 中的步骤。

  • 有关使用 Python 进行 Web 开发的常规工作流,请参阅 快速入门:使用 Visual Studio 创建第一个 Python Web 应用。 本文可用于了解如何从头开始生成 Python Web 应用程序(但不包括部署到 Azure)。

  • 若要使用 Visual Studio 2022 管理 Azure 资源并部署到 Azure,请参阅 使用 Visual Studio 进行 Azure 开发。 虽然此处的大部分文档都专门提及 .NET,但用于管理 Azure 资源和部署到 Azure 的工具的工作方式与编程语言无关。

  • 当 Visual Studio 2022 中没有可用于给定 Azure 管理或部署任务的内置工具时,始终可以使用 Azure CLI 命令

使用其他 IDE

如果使用的是另一个对 Azure 没有显式支持的 IDE,则可以使用 Azure CLI 管理 Azure 资源。 在下面的屏幕截图中,PyCharm IDE 中打开了一个简单的 Flask Web 应用。 可以使用命令将 Web 应用部署到Azure App 服务az webapp up。 在屏幕截图中,CLI 命令在 PyCharm 嵌入式终端模拟器中运行。 如果 IDE 没有嵌入式仿真器,则可以使用任何终端和相同的命令。 必须在计算机上安装 Azure CLI,并且无论哪种情况都可以访问。

A screenshot of the PyCharm IDE with an Azure CLI command deploying a web app.

Azure CLI 命令

使用 Azure CLI 命令在本地使用 Web 应用时,通常会使用以下命令:

命令 说明
az webapp 管理 Web 应用。 包括用于创建 Web 应用的子命令以及从本地工作区创建和部署的子命令
az container app 管理 Azure 容器应用。
az staticwebapp 管理 Azure 静态Web 应用。
az group 管理资源组和模板部署。 使用子命令 创建 资源组以将 Azure 资源放入。
az appservice 管理App 服务计划。
az config 托管的 Azure CLI 配置。 若要保存击键,可以定义其他命令自动使用的默认位置或资源组。

下面是一个示例 Azure CLI 命令,用于创建 Web 应用和关联的资源,并使用 az webapp up 在一个命令中将其部署到 Azure。 在 Web 应用的根目录中运行该命令。

az webapp up \
    --runtime PYTHON:3.9 \
    --sku B1 \
    --logs

有关此示例的详细信息,请参阅快速入门:将 Python(Django 或 Flask)Web 应用部署到Azure App 服务

请记住,对于某些 Azure 工作流,还可以从 Azure Cloud Shell 使用 Azure CLI。 Azure Cloud Shell 是一个可通过浏览器访问的,经过验证的,用于管理 Azure 资源的交互式 shell。

Azure SDK 密钥包

在 Python Web 应用中,可以使用用于 PythonAzure SDK 以编程方式引用 Azure 服务。 本 SDK 在用于 Python 的 Azure 库(SDK)部分中进行了广泛讨论。 在本部分中,我们将简要提及将在 Web 开发中使用的 SDK 的一些密钥包。 我们将介绍一个有关使用 Azure 资源对代码进行身份验证的最佳做法的示例。

下面是 Web 应用开发中常用的一些包。 可以直接在 pip虚拟环境中安装包。 或者将 Python 包索引 (Pypi) 名称 放入 requirements.txt 文件中。

SDK 文档 安装 Python 包索引
Azure 标识 pip install azure-identity azure-identity
Azure 存储 Blob pip install azure-storage-blob azure-storage-blob
Azure Cosmos DB pip install azure-cosmos azure-cosmos
Azure 密钥库机密 pip install azure-keyvault-secrets azure-keyvault-secrets

Azure 标识 包允许 Web 应用使用 Microsoft Entra ID 进行身份验证。 若要在 Web 应用代码中进行身份验证,建议在包中使用 azure-identity DefaultAzureCredential。 下面是有关如何访问Azure 存储的示例。 该模式与其他 Azure 资源类似。

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

azure_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
    account_url=account_url,
    credential=azure_credential)

将在 DefaultAzureCredential 预定义的位置查找帐户信息,例如,在环境变量中或 Azure CLI 登录。 有关逻辑的详细信息 DefaultAzureCredential ,请参阅 使用用于 Python 的 Azure SDK 向 Azure 服务验证 Python 应用。

基于 Python 的 Web 框架

在 Python Web 应用开发中,通常使用基于 Python 的 Web 框架。 这些框架提供页面模板、会话管理、数据库访问以及对 HTTP 请求和响应对象的轻松访问等功能。 框架使你能够避免需要重新发明通用功能的滚轮。

三个常见的 Python Web 框架是 DjangoFlaskFastAPI。 这些框架和其他 Web 框架可与 Azure 配合使用。

下面是有关如何在本地快速开始使用这些框架的示例。 运行这些命令,最终会得到一个应用程序,尽管可以部署到 Azure 的简单命令。 在 虚拟环境中运行这些命令。

步骤 1: 使用 pip 下载框架。

pip install Django

步骤 2: 创建 hello world 应用。

使用 django-admin startproject 命令创建示例项目。 该项目包括一个 manage.py 文件,该文件是运行应用的入口点。

django-admin startproject hello_world

步骤 3: 在本地运行代码。

Django 使用 WSGI 运行应用。

python hello_world\manage.py runserver

步骤 4: 浏览 hello world 应用。

http://127.0.0.1:8000/

此时,添加 requirements.txt 文件,然后将 Web 应用部署到 Azure,或使用 Docker 对其进行容器化,然后部署它。

后续步骤