Python v2 Azure Functions 的正确文件夹结构是什么?

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

我正在开发以下 Python v2 Azure 函数:

带有文件夹结构的azure函数代码

这个想法是能够调用在shared_code/helper.py中定义的简单辅助函数; helper.py 具有以下结构:

import logging
import requests
from datetime import datetime

def debug_print():
    return "whatever"

def here_using_requests():
    response = api_call()
    return response

当我通过GitHub部署上面的代码时,部署成功,但我在Function App中看不到任何功能。

  • 一旦我删除
    from shared_code.helper import debug_print
    ,功能就会再次显示在门户中,并且它可以工作(blob 活页夹工作正常)。

任何人都可以向我解释我做错了什么以及如何正确设置项目?这是azure函数的其他文件:

# host.json
{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true
      }
    }
  },
  "extensionBundle": {
      "id": "Microsoft.Azure.Functions.ExtensionBundle",
      "version": "[4.0.0, 5.0.0)"
  }
}
#requirements.txt

azure-functions
requests

谢谢!

  • 我已经尝试将 helper.py 从文件夹中取出或使用不同的导入语句,但问题仍然存在。

  • 假设

    from shared_code.helper import debug_print
    在某种程度上干扰了function_app.py的入口点,我做了以下尝试:我将导入语句移到了主定义下:

import logging
import azure.functions as func

app = func.FunctionApp()

@app.function_name(name="BlobOutput1")
@app.route(route="file")
@app.blob_input(arg_name="inputblob",
                path="product-data/xxx.csv",
                connection="AzureWebJobsStorage")
@app.blob_output(arg_name="outputblob",
                path="product-data/test.csv",
                connection="AzureWebJobsStorage")
def main(req: func.HttpRequest, inputblob: str, outputblob: func.Out[str]):
    from shared_code.helper import debug_print
    logging.info(f'Python Queue trigger function processed {len(inputblob)} bytes')
    outputblob.set(inputblob)

    string = debug_print()
    return string

在这种情况下,部署成功,我可以在Function App中看到该函数,但是当触发时,我收到500内部错误“没有名为requests的模块”(在部署期间requests已正确安装在环境中)。

编辑: init.py 为空。

我刚刚编写了 api_call(),但你可以假设它是这样的:

def api_call():
    url = "https://api.xxx.com/auth/o2/token"
    payload = {
        "grant_type": "refresh_token"
    }
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    response = requests.post(url, data=payload, headers=headers)
    response.raise_for_status()
    return response.json().get("access_token")
python-3.x azure-functions
1个回答
0
投票

我具有与您相同的文件夹结构和代码,并使用下面给出的 YAML 代码使用 GitHub 操作将函数部署到函数应用程序。

name: Deploy Python project to Azure Function App

on:
  push:
    branches: ["main"]

env:
  AZURE_FUNCTIONAPP_NAME: 'afreeen-fa'   
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       
  PYTHON_VERSION: '3.11'                    

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v4

    - name: Setup Python ${{ env.PYTHON_VERSION }} Environment
      uses: actions/setup-python@v4
      with:
        python-version: ${{ env.PYTHON_VERSION }}

    - name: 'Resolve Project Dependencies Using Pip'
      shell: bash
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        python -m pip install --upgrade pip
        pip install -r requirements.txt --target=".python_packages/lib/site-packages"
        popd
    - name: 'Run Azure Functions Action'
      uses: Azure/functions-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
        publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }} 
        scm-do-build-during-deployment: true
        enable-oryx-build: true

这成功地将我的函数部署到函数应用程序。

enter image description here

enter image description here

您还可以使用

func azure functionapp publish {functionAppName}
命令或 VS Code 中的函数扩展来部署该函数。

enter image description here

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