在 Azure 中使用 Bottle 创建 Web 应用

Note

本文涉及的 SDK 和工具是在 Microsoft Corporation 运行的 Azure 服务中使用的,而在中国, Azure 是由 21Vianet 运行的。 请根据需要参阅中国区 Azure 应用程序开发说明

在本教程中,我们将介绍如何开始在 Azure 应用服务 Web 应用中运行 Python。 Web 应用提供有限的免费托管和快速部署功能,现在,你可以使用 Python! 随着您的应用增长,可以切换到付费托管,并且还可以与所有其他 Azure 服务集成。

你将使用 Bottle Web 框架创建 Web 应用(请参阅本教程针对 DjangoFlask 的备选版本)。 将从 Azure 应用商店创建 Web 应用,设置 Git 部署和本地克隆存储库。 然后,本地运行 Web 应用,将其更改、提交和推送到 Azure 应用服务 Web 应用。 本教程演示如何从 Windows 或 Mac/Linux 执行此操作。

Note

若要完成本教程,你需要一个 Azure 帐户。 可以注册试用版

先决条件

  • Windows、 Mac 或 Linux
  • Python 2.7 或 3.4
  • setuptools、pip、virtualenv(仅限 Python 2.7)
  • Git
  • Python Tools 2.2 for Visual Studio (PTVS) - 注意:这是可选的

Note

若要将 Visual Studio 连接到 Azure 中国区,可按使用 Visual Studio 2015 连接中国区 Azure中的说明操作。

如果使用的是 Visual Studio 2015 Update 2 或更高版本,可以按照以下图片中的说明,选中“启用隔离的 Azure Active Directory 配置”选项。

enable-isolated-azure-active-directory-configuration

如果使用的是 Visual Studio 2017,可按 使用 Visual Studio 2017 连接中国区 Azure中的说明操作。

注意:Python 项目目前不支持 TFS 发布。

Windows

如果尚未安装 Python 2.7 或 3.4(32 位) ,建议使用 Web 平台安装程序来安装 Azure SDK for Python 2.7Azure SDK for Python 3.4。 这将安装 32 位版本的 Python、setuptools、pip、virtualenv 等(32 位 Python 是在 Azure 主机计算机上安装的)。 或者,您可以从 python.org获取 Python。

对于 Git,我们建议使用 Git for WindowsGitHub for Windows。 如果您使用 Visual Studio,可以使用集成的 Git 支持。

我们还建议你安装 Python Tools 2.2 for Visual Studio。 这是可选的,但是如果你有 Visual Studio(包括免费 Visual Studio Community 2013 或 Visual Studio Express 2013 for Web),则可以提供 Python IDE。

Mac/Linux

你应安装了 Python 和 Git ,但请确保你具有 Python 2.7 或 3.4。

在 Azure 门户中创建 Web 应用

创建应用的第一步是通过 Azure 门户创建 Web 应用。

  1. 登录到 Azure 门户,然后单击左下角的“新建”按钮。
  2. 单击“Web + 移动”。
  3. 单击”Web 应用”。
  4. 配置新的 Bottle 应用,如为其创建新的应用服务计划和新的资源组。 然后单击“创建” 。
  5. 按照 从本地 Git 部署到 Azure 应用服务的说明为新创建的 Web 应用配置 Git 发布。

应用程序概述

Git 存储库内容

下面是你会在初始 Git 存储库找到的文件的概览,我们将在下一节中予以克隆。

\routes.py
\static\content\
\static\fonts\
\static\scripts\
\views\about.tpl
\views\contact.tpl
\views\index.tpl
\views\layout.tpl

应用程序的的主要来源。 包含具有母版布局的 3 页(索引、关于、联系人)。 静态内容和脚本包括 bootstrap、 jquery、 modernizr 和 respond。

\app.py

本地开发服务器支持。 使用此选项以在本地运行应用程序。

\BottleWebProject.pyproj
\BottleWebProject.sln

用于 Python Tools for Visual Studio的项目文件。

\ptvs_virtualenv_proxy.py

虚拟环境的 IIS 代理和 PTVS 远程调试支持。

\requirements.txt

此应用程序所需的外部软件包。 部署脚本将对在此文件中列出的包进行 pip 安装。

\web.2.7.config
\web.3.4.config

IIS 配置文件。 部署脚本将使用适当的 web.x.y.config,并将其复制为 web.config。

可选文件 - 自定义部署

如果这些条件都成立,Azure 将确定你的应用程序使用 Python:

  • 根文件夹中的 requirements.txt 文件
  • 根文件夹中的任何 .py 文件或指定 python 的 runtime.txt

如果是这种情况,它将使用特定于 Python 的部署脚本,此脚本执行文件的标准同步以及其他 Python 操作,例如:

  • 自动管理虚拟环境
  • 使用 pip 来安装 requirements.txt 中列出的软件包
  • 根据所选的 Python 版本创建相应的 web.config。
  • 收集 Django 应用程序的静态文件

您可以控制默认部署步骤的某些方面,而无需自定义脚本。

如果您想要跳过所有特定于 Python 的部署步骤,可以创建此空文件:

\.skipPythonDeployment

为了更大程度控制部署,可以通过创建以下文件来覆盖默认部署脚本:

\.deployment
\deploy.cmd

可以使用 Azure 命令行接口创建这些文件。 从项目文件夹使用以下命令:

azure site deploymentscript --python

这些文件不存在时,Azure 创建一个临时部署脚本然后运行此脚本。 它等同于使用以上命令创建的脚本。

可选文件 - Python 运行时

Azure 将按以下优先级确定要用于其虚拟环境的 Python 的版本:

  1. 在根文件夹中的 runtime.txt 内指定的版本
  2. 由 Python 设置在 Web 应用配置中指定的版本(Azure 门户中 Web 应用的“设置” > “应用程序设置”边栏选项卡)
  3. 如果未指定以上任何项,则 python 2.7 是默认值

内容的有效值

\runtime.txt

是:

  • python-2.7
  • python-3.4

如果指定了 micro 版本(第三个数字)时,将其忽略。

服务器上的其他文件

某些文件存在于服务器上,但不会添加到 git 存储库。 这些是由部署脚本创建的。

\web.config

IIS 配置文件。 每次部署中从 web.x.y.config 创建

\env\

Python 虚拟环境。 如果在 Web 应用上尚不存在兼容的虚拟环境,请在部署期间创建。 在 requirements.txt 中列出的软件包是 pip 安装的,但如果已安装软件包,pip 将跳过安装。

后续 3 节描述如何在 3 个不同的环境下继续进行 Web 应用开发:

  • Windows,具有 Python Tools for Visual Studio
  • Windows,具有命令行
  • Mac/Linux,具有命令行

Web 应用开发 - Windows - Python Tools for Visual Studio

克隆存储库

首先,使用 Azure 门户上提供的 URL 来克隆存储库。 有关详细信息,请参阅从本地 Git 部署到 Azure 应用服务

打开包含在存储库根中的解决方案文件 (.sln) 。

创建虚拟环境

现在,我们将创建本地开发的虚拟环境。 右键单击 Python 环境,选择“添加虚拟环境...”。

  • 请确保环境的名称是 env
  • 选择基解释器。 请确保使用的 Python 版本与 Web 应用所选的 Python 版本相同(在 runtime.txt 中或 Azure 门户中 Web 应用的“应用程序设置”边栏选项卡)。
  • 请确保选中此选项以下载并安装软件包。

单击“创建” 。 这会创建虚拟环境,并安装 requirements.txt 中列出的依赖项。

使用开发服务器运行

按 F5 开始调试,您的 web 浏览器会自动打开到本地运行的页面。

您可以在源中设置断点,使用监视窗口等。请参阅 Python Tools for Visual Studio 文档以了解有关各种功能的详细信息。

进行更改

现在你可以通过更改应用程序源和/或模板进行试验。

测试更改后,将其提交到 Git 存储库:

安装多个软件包

你的应用程序可能具有除 Python 和 Bottle 以外的依赖关系。

你可以使用 pip 安装其他软件包。 要安装包,请右键单击虚拟环境,然后选择 安装 Python 软件包

例如,要安装 Azure SDK for Python(使你可以访问 Azure 存储、服务总线和其他 Azure 服务),请输入 azure

在虚拟环境上右键单击并选择 生成 requirements.txt 以更新 requirements.txt。

然后,将 requirements.txt 的更改提交到 Git 存储库。

部署到 Azure

要触发部署操作,请单击“同步”或“推送”。 同步执行推送和拉取。

首次部署将需要一些时间,因为它将创建虚拟环境、 安装包等。

Visual Studio 不会显示部署的进度。

浏览到 Azure URL 以查看你的更改。

Web 应用开发 - Windows - 命令行

克隆存储库

首先,使用在 Azure 门户中提供的 URL 来克隆存储库,并将 Azure 存储库添加为远程。 有关详细信息,请参阅从本地 Git 部署到 Azure 应用服务

git clone <repo-url>
cd <repo-folder>
git remote add azure <repo-url> 

创建虚拟环境

我们将为开发目的创建新的虚拟环境 (不要将其添加到存储库)。 Python 中的虚拟环境是可重定位,因此使用该应用程序的每个开发人员将在本地创建自己的环境。

请确保使用的 Python 版本与为 Web 应用所选的 Python 版本相同(在 runtime.txt 中或 Azure 门户中 Web 应用的“应用程序设置”边栏选项卡)

对于 Python 2.7:

c:\python27\python.exe -m virtualenv env

对于 Python 3.4:

c:\python34\python.exe -m venv env

安装应用程序所需的任何外部软件包。 可以使用该存储库的根处 requirements.txt 文件在虚拟环境中安装软件包:

env\scripts\pip install -r requirements.txt

使用开发服务器运行

你可以使用以下命令在开发服务器下启用应用程序:

env\scripts\python app.py

控制台将显示服务器侦听的 URL 和端口:

然后,将 web 浏览器打开到该 URL。

执行更改

现在你可以通过更改应用程序源和/或模板进行试验。

测试更改后,将其提交到 Git 存储库:

git add <modified-file>
git commit -m "<commit-comment>"

安装多个软件包

你的应用程序可能具有除 Python 和 Bottle 以外的依赖关系。

你可以使用 pip 安装其他软件包。 例如,要安装 Azure SDK for Python(使你可以访问 Azure 存储、 服务总线和其他 Azure 服务),请输入:

env\scripts\pip install azure

请确保更新 requirements.txt:

env\scripts\pip freeze > requirements.txt

提交更改:

git add requirements.txt
git commit -m "Added azure package"

部署到 Azure

要触发部署,请将更改推送到 Azure:

git push azure master

你将看到部署脚本的输出,包括虚拟环境创建,安装软件包,创建 web.config。

浏览到 Azure URL 以查看更改。

Web 应用开发 - Mac/Linux - 命令行

克隆存储库

首先,使用在 Azure 门户中提供的 URL 来克隆存储库,并将 Azure 存储库添加为远程。 有关详细信息,请参阅从本地 Git 部署到 Azure 应用服务

git clone <repo-url>
cd <repo-folder>
git remote add azure <repo-url> 

创建虚拟环境

我们将为开发目的创建新的虚拟环境 (不要将其添加到存储库)。 Python 中的虚拟环境是可重定位,因此使用该应用程序的每个开发人员将在本地创建自己的环境。

请确保使用的 Python 版本与为 Web 应用所选的 Python 版本相同(在 runtime.txt 中或 Azure 门户中 Web 应用的“应用程序设置”边栏选项卡。)

对于 Python 2.7:

python -m virtualenv env

对于 Python 3.4:

python -m venv env

pyvenv env

安装应用程序所需的任何外部软件包。 可以使用该存储库的根处 requirements.txt 文件在虚拟环境中安装软件包:

env/bin/pip install -r requirements.txt

使用开发服务器运行

你可以使用以下命令在开发服务器下启用应用程序:

env/bin/python app.py

控制台将显示服务器侦听的 URL 和端口:

然后,将 web 浏览器打开到该 URL。

执行更改

现在你可以通过更改应用程序源和/或模板进行试验。

测试更改后,将其提交到 Git 存储库:

git add <modified-file>
git commit -m "<commit-comment>"

安装多个软件包

你的应用程序可能具有除 Python 和 Bottle 以外的依赖关系。

你可以使用 pip 安装其他软件包。 例如,要安装 Azure SDK for Python(使你可以访问 Azure 存储、 服务总线和其他 Azure 服务),请输入:

env/bin/pip install azure

请确保更新 requirements.txt:

env/bin/pip freeze > requirements.txt

提交更改:

git add requirements.txt
git commit -m "Added azure package"

部署到 Azure

要触发部署,请将更改推送到 Azure:

git push azure master

你将看到部署脚本的输出,包括虚拟环境创建,安装软件包,创建 web.config。

浏览到 Azure URL 以查看你的更改。

故障排除 - 软件包安装

在 Azure 上运行时,有些软件包可能无法使用 pip 进行安装。 可能只是该软件包在 Python 软件包索引中不可用。 可能需要一个编译器(在运行 Azure 应用服务中的 Web 应用的计算机上未提供编译器)。

在此部分中,我们将考察解决此问题的方法。

请求轮

如果软件包安装需要编译器,您应尝试联系软件包所有者以请求为软件包提供轮。

现在使用最新提供的 Microsoft Visual C++ Compiler for Python 2.7,就可以更轻松地构建具有针对 Python 2.7 的本机代码的软件包。

构建轮(需要 Windows)

注意:使用此选项时,确保使用匹配 Azure 应用服务中 Web 应用上所用的平台/体系结构/版本(Windows/32 位/2.7 或 3.4)的 Python 环境编译此软件包。

如果软件包由于需要编译器而未安装,您可以在本地计算机上安装编译器,然后为软件包构建轮,随后将轮包含在您的存储库中。

Mac/Linux 用户:如果没有 Windows 计算机的访问权限,请参阅创建运行 Windows 的虚拟机,了解如何在 Azure 上创建 VM。 可以使用它来构建轮、将其添加到存储库以及在必要时放弃虚拟机。

对于 Python 2.7,可以安装 Microsoft Visual C++ Compiler for Python 2.7

对于 Python 3.4,可以安装 Microsoft Visual C++ 2010 Express

要构建轮,你需要轮软件包:

env\scripts\pip install wheel

将使用 pip wheel 编译依赖项:

env\scripts\pip wheel azure==0.8.4

这将在 \wheelhouse 文件夹中创建 .whl 文件。 将 \wheelhouse 文件夹和轮文件添加到您的存储库。

编辑 requirements.txt,在顶部添加 --find-links 选项。 这会让 pip 在本地文件夹中查找完全匹配项,然后转至 python 软件包索引。

--find-links wheelhouse
azure==0.8.4

如果想要将所有依赖项包含在 \wheelhouse 文件夹中而根本不使用 python 软件包索引,则可以通过将 --no-index 添加到 requirements.txt 之上来强制 pip 忽略软件包索引。

--no-index

自定义安装

可以自定义部署脚本以在虚拟环境中使用备用安装程序(例如 easy_install)来安装软件包。 请参阅 deploy.cmd 以了解注释掉的示例。 确保此类软件包不列入 requirements.txt 中,从而防止 pip 将其安装。

将其添加到部署脚本:

env\scripts\easy_install somepackage

还可以使用 easy_install 从 exe 安装程序进行安装(有些兼容 zip,所以 easy_install 支持它们)。 将安装程序添加到存储库,然后通过传递可执行文件的路径来调用 easy_install。

将其添加到部署脚本:

env\scripts\easy_install "%DEPLOYMENT_SOURCE%\installers\somepackage.exe"

将虚拟环境包含在存储库中(需要 Windows)

注意:使用此选项时,确保使用匹配 Azure 应用服务中 Web 应用上所用的平台/体系结构/版本(Windows/32 位/2.7 或 3.4)的虚拟环境。

如果存储库中包含虚拟环境,您可以通过创建一个空文件来防止部署脚本在 Azure 上执行虚拟环境管理:

.skipPythonDeployment

建议删除应用上的现有虚拟环境,防止在自动管理虚拟环境时出现剩余文件。

故障排除 - 虚拟环境

如果部署脚本检测到兼容的虚拟环境已存在,它将跳过在 Azure 上创建虚拟环境的过程。 这可以显著加快部署。 通过 pip,将跳过已安装的软件包。

在某些情况下,您可能想要强制删除该虚拟环境。 如果您决定将虚拟环境包含为您的存储库的一部分,需要执行此操作。 如果您需要删除某些软件包或测试对 requirements.txt 的更改,可能也会执行此操作。

有几个选项用于管理 Azure 上的现有虚拟环境:

选项 1:使用 FTP

通过 FTP 客户端,连接到服务器,然后您就可以删除 env 文件夹。 请注意,某些 FTP 客户端(例如 Web 浏览器)可能为只读而不允许您删除文件夹,因此您要确保使用具备此功能的 FTP 客户端。 在 Azure 门户上,Web 应用的边栏选项卡中显示 FTP 主机名和用户。

选项 2:切换运行时

这是利用以下事实的一个替代方法:部署脚本不匹配期望的 Python 版本时,它将删除 env 文件夹。 这将有效地删除现有环境,然后创建新环境。

  1. 切换到其他版本的 Python(通过 runtime.txt 或 Azure 门户中的“应用程序设置”边栏选项卡)
  2. git 推送一些更改 (如果有任何 pip 安装错误,请忽略)
  3. 切换回初始版本的 Python
  4. git 再次推送某些更改

选项 3:自定义部署脚本

如果您已自定义部署脚本,则可以更改 deploy.cmd 中的代码以强制其删除 env 文件夹。

后续步骤

请查看下面链接以了解有关 Bottle 和 Python Tools for Visual Studio 的更多信息:

有关使用 Azure 表存储和 MongoDB 的信息:

发生的更改