你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

生成 Python Azure Functions 应用

Azure Functions 支持三个生成选项,用于将 Python 应用发布到 Azure。 根据本地环境、应用依赖项和运行时要求选择生成方法。

生成操作的快速比较

部署类型 安装依赖项的位置 典型用例
远程生成 (建议) Azure (应用服务) 对于大多数用户,建议使用默认值
本地生成 您的机器 Linux/macOS 开发者,受限制的 Windows 使用场景
自定义依赖项 通过额外的索引 URL 或本地安装进行处理 非 PyPI 依赖项

部署包注意事项

将 Python 函数应用部署到 Azure 时,请记住以下打包要求:

  • 包内容,而不是文件夹:部署项目文件夹的内容,而不是文件夹本身。
  • 根级别 host.json:确保单个 host.json 文件位于部署包的根目录中,而不是嵌套在子文件夹中。
  • 排除开发文件:您可以通过将类似tests/.github/.venv*/这样的文件夹包含在.funcignore中,从部署包中排除它们。
  • 生成环境必须与生产环境匹配:必须使用与生产应用相同的 Python 版本在 ubuntu 计算机上生成依赖项。 远程生成 会自动处理此方案。
  • 依赖项必须安装到./.python_packages/lib/site-packages:远程构建会将requirements.txt
  • 请记住部署包大小:大型依赖项集会增加生成时间、冷启动延迟以及模块导入和初始化时间。 具有大型科学库或 ML 库(包括 pytorch)的应用程序尤其受到影响。
  • 远程生成有 60 秒的超时:如果依赖项安装超出限制,生成将失败。 在这种情况下,请考虑使用 本地生成 并使用预生成依赖项进行部署。
  • 模块导入具有 2 分钟的时间限制:启动期间的 Python 模块加载和函数索引限制为 Python 3.13 及更高版本,或启用的较旧 Python 版本 PYTHON_ENABLE_INIT_INDEXING 限制为 2 分钟。 如果应用超出此范围,请减少顶级导入或使用延迟导入(在函数正文中而不是全局范围内导入模块)。

远程生成

对于将 Python 应用仅代码部署到 Functions,建议使用远程生成方法。

使用 远程生成时,Functions 平台将处理包安装并确保与远程运行时环境的兼容性。 使用远程生成也会生成较小的部署包。

使用这些工具发布 Python 应用时,可以使用远程生成:

若要为其他方案(例如使用 Azure Pipelines 持续交付)启用远程生成,请参阅 “启用远程生成”。

使用 PIP_EXTRA_INDEX_URL 应用设置时,远程生成还支持自定义包索引。 有关详细信息,请参阅远程构建

重要

远程生成将安装requirements.txt中列出的所有依赖项。 若要确保所有必需的包都已安装,请确保在文件中包括这些依赖项 requirements.txt

本地生成

如果不请求远程构建,依赖项将在您的计算机上安装。 然后将整个本地项目和依赖项打包到本地并部署到函数应用。 使用本地构建会导致上传的包变得更大。

还需要将依赖项安装到正确的目录中。 使用 pip install --target="./.python_packages/lib/site-packages" 将所需的依赖项安装到本地 .python_packages/lib/site-packages 文件夹中。 例如,如果文件中列出了 requirements.txt 依赖项,则可以运行以下命令:

pip install --target="./.python_packages/lib/site-packages" -r requirements.txt

在以下情况下使用本地生成:

  • 你在本地在 Linux 或 macOS 上进行开发。
  • 远程生成不可用或受限。
  • 你想要在不是 requirements.txt 的文件中定义依赖项,例如 pyproject.toml

可以将以下工具配置为使用本地生成:

重要

在 Windows 计算机上开发 Python 应用时,请勿使用本地生成。 在 Windows 计算机上生成的包通常存在在 Azure Functions 中部署到 Linux 并在 Linux 上运行的问题。 如果确信包在基于 Linux 的系统上运行,则仅使用本地生成。

自定义依赖项

Azure Functions 支持自定义和其他非 PyPI 依赖项,方法是使用 PIP_EXTRA_INDEX_URL 应用设置或在 Linux 或 macOS 计算机上创建本地版本。

使用额外索引 URL 进行远程构建

当私有包可以联机使用时,可以通过应用设置来设置私有包位置PIP_EXTRA_INDEX_URL,然后请求远程构建。 设置 PIP_EXTRA_INDEX_URL 后,远程生成会在部署期间使用此包源。 PIP_INDEX_URL 替换包索引,因此请考虑改用 PIP_EXTRA_INDEX_URL 以防止意外行为。

本地包或 wheel 文件

构建 Python Azure 函数应用时支持本地包和 wheel 文件。

若要使用 远程生成安装这些包或轮子,可以在文件中包括依赖项 requirements.txt ,并在 启用远程生成的情况下进行部署。

例如,文件 requirements.txt 可能类似于以下代码片段:

 # Installing a custom wheel
 <my_package_wheel>.whl
 
 # Installing a local package
 path/to/my/package

若要使用 本地生成安装这些依赖项,请将依赖项安装到本地 .python_packages/lib/site-packages 文件夹中,并在 禁用远程生成的情况下进行部署。 例如,如果文件中定义了 requirements.txt 包,则可以使用以下命令和 Core Tools 安装和发布:

pip install --target="./.python_packages/lib/site-packages" -r requirements.txt
func azure functionapp publish <APP_NAME> --no-build