从解释器将本地函数部署到正在安装的 Azure / Python 3.10.4 而不是 3.10.15 时,未找到 HTTP 触发器

问题描述 投票:0回答:1

在 VSC 中将本地 Azure 函数部署到 Azure 时,我收到“未找到 HTTP 触发器”的消息。 Azure 消费按量付费计划,配置中 Python 版本设置为 3.10。

部署输出显示在 Azure 中安装 Python 3.10.4,但解释器设置为 Python 3.10.15/venv。 激活 venv 后,在本地运行该函数会显示找到 3.10.15 并返回本地 url,没有错误。 就好像 Azure 没有考虑解释器或 pyenv.cfg 中的路径,而是以某种方式使用 3.10.4,从而导致版本不匹配。

pyenv.cfg 最初是自动加载的,其主路径为 /usr/bin,而不是 venv 环境中的 /home/gv/venv/bin,后来我手动更改了该路径。 不确定使用哪个以及为什么 /home/gv/venv/bin 没有加载,但似乎一个更有意义。

早期测试运行包括“检测到以下平台:python:3.10.4 未安装平台‘python’的版本‘3.10.4’。生成脚本来安装它”;手动路径切换到 venv 后就消失了;但仍然与 3.10.15 不匹配。

调试默认的 function_ap.py 文件本身或运行附加到本地函数的文件没有问题,并且在本地运行该函数可以正常工作,返回预期的消息。

requirements.txt 通过 freeze >requirements.txt 有依赖关系;在本地运行期间这些没有问题。

这是使用 Python 编程模型 V2 的 WSL/Ubuntu 24.04.1,未更改默认格式。 我使用 deadsnakes、update-alternatives 等来允许安装 3.10.15 并将其设置为 Ubuntu 默认值,而不是 Ubuntu 附带的 3.12。 pip 24.3.1 已安装在 venv 中。

在 venv 中安装 Azure 模块:
- azure-functions-core-tools-4 - 天蓝色功能 - 天蓝色存储 blob - 天蓝色身份

非常感谢。

部署输出调试本地附加函数pyenv.cfgfunction_app.py文件settings.jsonlocal.settings.jsonhost.jsonrequirements.txt

azure-functions
1个回答
0
投票

听起来您遇到了一些与Python环境和Azure Function部署相关的问题。让我们分解问题并逐步解决每个部分。

1. Python 版本不匹配

Azure Functions 可能并不总是遵循虚拟环境中指定的确切版本。 Azure Functions 通常使用其可用的版本,在您的情况下为 3.10.4。为了确保一致性,您应该尽可能地调整本地和 Azure 环境。

2. 虚拟环境配置

pyenv.cfg
文件应正确指向您的虚拟环境。如果您的虚拟环境位于主路径,则主路径应为
/home/gv/venv/bin

3. 部署配置

确保您的部署过程已正确配置为使用虚拟环境和正确的 Python 版本。

解决步骤

1. 验证虚拟环境

确保您的虚拟环境设置正确并且Python版本符合预期。

# Activate the virtual environment
source /home/gv/venv/bin/activate

# Verify the Python version
python --version

2. 更新
pyenv.cfg

确保

pyenv.cfg
文件指向正确的虚拟环境路径。

home = /home/gv/venv/bin
include-system-site-packages = false
version = 3.10.15

3. 检查 Azure Function 应用程序设置

在 Azure 门户中,转到 Function App 设置并验证 Python 版本。应设置为 3.10。

4. 更新
requirements.txt

确保您的

requirements.txt
是最新的并包含所有必要的依赖项。

pip freeze > requirements.txt

5. 使用 Azure CLI 进行部署

使用 Azure CLI 部署函数应用。这可确保部署过程一致并尊重您的虚拟环境。

# Login to Azure
az login

# Deploy the function app
func azure functionapp publish <FunctionAppName> --build-native-deps

6. 检查部署日志

部署后,检查日志以确保不存在与Python版本或依赖项相关的错误。

# View deployment logs
az webapp log tail --name <FunctionAppName> --resource-group <ResourceGroupName>

7. 验证函数触发器

确保您的函数触发器在您的

function.json
文件中正确定义。

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "authLevel": "anonymous",
      "name": "req"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

额外提示

  • 一致性:确保本地开发环境与 Azure Function App 的 Python 版本和环境设置一致。
  • 依赖项:仔细检查所有必需的依赖项是否包含在
    requirements.txt
    中。
  • Azure 扩展:确保您在 Visual Studio Code 中安装了最新的 Azure 扩展。

示例
requirements.txt

azure-functions
azure-storage-blob
azure-identity

示例
local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "<YourStorageConnectionString>",
    "FUNCTIONS_WORKER_RUNTIME": "python"
  }
}

通过执行这些步骤,您应该能够解决问题并成功部署 Azure Function。如果您仍然遇到问题,请提供有关您在部署过程中看到的特定错误或日志的更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.