你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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 Functions Core Tools:命令
func azure functionapp publish在发布 Python 应用时默认请求远程生成。 -
AZ CLI:
az functionapp deployment source config-zip部署 Python 应用时默认使用远程生成。 - Visual Studio Code: Azure Functions:部署到 Azure... 命令始终使用远程生成。
-
使用 GitHub Actions 实现持续交付:对于 Flex 消耗计划,当
remote-build参数设置为true时;对于专用计划,当scm-do-build-during-deployment和enable-oryx-build设置为true时,Azure/functions-action@v1 操作会使用远程生成。
若要为其他方案(例如使用 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。
可以将以下工具配置为使用本地生成:
-
Azure Functions Core Tools:使用
func azure functionapp publish并带上--no-build标志。 -
AZ CLI:
az functionapp deployment source config-zip带有--build-remote=false标志。 -
使用 GitHub Actions 持续交付:将
remote-build参数设置为false以应用于弹性消耗计划,或将scm-do-build-during-deployment和enable-oryx-build设置为false以适用于专用计划。
重要
在 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