使用azure devops分别在azure function app和azure app上部署python api和python Flask应用程序

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

我有一个通过 azure devops 在 api_env 虚拟环境中部署的 python azure 函数应用程序。同样,我有一个 python Flask 应用程序,即 python 后端和 typescript 前端。 python 后端是通过激活一个名为 backend_env 的不同虚拟环境来部署的。应用程序后端代码调用 API,即部署为 Azure 函数的 API。但是,当我通过调试控制台查看时,使用的一些软件包(例如 openai、langchain 等)位于 requests.txt 中,并且位于 azure 函数应用程序的 api_env 文件夹中,但 azure 函数会抛出这些软件包的“模块未找到”错误。我尝试了各种选项,即除了通过 devops 管道激活 api_env 之外,我还在配置设置中添加了设置,但似乎没有任何帮助。有人能指出我正确的方向吗?

`YAML 代码 步骤: - 脚本:| python3.9 -m venv api_env 源 api_env/bin/activate pip install --升级安装工具 pip3.9安装-r需求.txt 工作目录:$(Build.SourcesDirectory)/api/python displayName: '安装 api 的 Python 依赖项'

- task: AzureFunctionApp@1
  inputs:
    azureSubscription: 'spn'
    appType: 'functionAppLinux'
    appName: '$(knowbot-funcapp-name)'
    package: '$(System.DefaultWorkingDirectory)/api/python'
    startUpCommand: |
      source api_env/bin/activate
      func start --python
    workingDirectory: '$(System.DefaultWorkingDirectory)/api/python'
  displayName: 'Deploy Function App'`

还尝试在函数 init.py 中添加以下内容

 sys.path.append('/home/site/wwwroot/api_env/lib/python3.9/site-packages')

我期待 api 调用成功。

python azure function flask
1个回答
0
投票

我尝试使用requirements.txt中的Openai模块在Azure Devops中部署具有虚拟环境的Function应用程序,并且成功了,请参阅下面:-

我的init.py代码:-

import openai
import logging
import azure.functions as func

def main(req: func.HttpRequest) -> func.HttpResponse:
    # Set up OpenAI API key
    openai.api_key = "sk-8Zg7i4icv8gh60e3IhnaT3Bxxxxx"

    # Use the OpenAI API to generate some text
    prompt = "Hello, OpenAI!"
    response = openai.Completion.create(engine="text-davinci-002", prompt=prompt)

    # Log the response
    logging.info(response)

    # Return the response as an HTTP response
    return func.HttpResponse(response.choices[0].text)

我的function.json代码:-

{
    "bindings": [
        {
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        }
    ],
    "scriptFile": "__init__.py",
    "entryPoint": "main"
}

我的主机.json:-

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.*, 4.0.0)"
  }
}

我的要求.txt :-

azure-functions
openai

我的 YAML 管道脚本:-

trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:

- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.9'
    addToPath: true
- script: |
    python3 -m venv env
    source env/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt
  displayName: 'Install Python dependencies'
- task: AzureFunctionApp@1
  inputs:
    azureSubscription: '<Subscription>'
    appType: 'functionAppLinux'
    appName: 'siliconfunc32'
    package: '$(System.DefaultWorkingDirectory)'
    startUpCommand: 'func start --python'

enter image description here

检查您的虚拟环境 api_env 是否在您的 Function 应用程序启动之前启动。在 YAML 代码中,您在安装依赖项之前正在运行虚拟环境,请尝试在函数启动之前启动虚拟环境,如下所示:-

startUpCommand: |
  source api_env/bin/activate
  func start --python

此外,验证您的虚拟环境所在位置,您可以输入此命令来检查您的系统路径:-

import sys
print(sys.path)

使用以下代码启动虚拟环境时添加虚拟环境的完整路径:-

startUpCommand: |
  source /path/to/api_env/bin/activate
  func start --python
© www.soinside.com 2019 - 2024. All rights reserved.