Функции Azure: задание не найдено (Python)

Я разработал приложение-функцию Azure. Он написан на Python и работает отлично. Впервые я разработал это в виртуальной среде, используя pyenv на своем ноутбуке.

Теперь я переключился на другой ноутбук, загрузил функциональное приложение и установил новую виртуальную среду для этого ноутбука. Функция запускается нормально, и виртуальная среда работает. Насколько я вижу, пакеты установлены.

Однако при запуске функции я получаю сообщение об ошибке «Функции задания не найдены». Попробуйте сделать свои классы и методы должностей общедоступными. Если вы используете расширения привязки (например, Azure Storage, ServiceBus, таймеры и т. д.), убедитесь, что вы вызвали метод регистрации для расширений в своем стартовом коде (например, builder.AddAzureStorage(), builder.AddServiceBus( ), builder.AddTimers() и т. д.)'.

Я видел других с похожими проблемами. Однако эти проблемы были в основном в файлах host.json и local.settings.json. Мне пока не удалось найти решение или ошибку в обоих этих файлах. Кроме того, мой function_app.py не выдает никаких ошибок (возможно, потому, что его не видно...)

Первые несколько строк моего function_app.py, куда я добавил строку @app.function_name, как указано в предыдущих сообщениях:

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.function_name("func")
@app.route(route = "http_example", auth_level=func.AuthLevel.ANONYMOUS)
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

хост.json:

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

local.settings.json:

{
  "IsEncrypted": false,
  "Values": {
  "FUNCTIONS_WORKER_RUNTIME": "python",
  "AzureWebJobsFeatureFlags": "EnableWorkerIndexing",
  "AzureWebJobsStorage": "UseDevelopmentStorage=true"
  }
  }

Приятно знать, что это другой ноутбук, на котором выполнен вход под учетной записью другого арендатора. Я не уверен, может ли это вызвать проблему.

Заранее спасибо.

Обновлено: Скриншот структуры папок: структура папок

запуск.json:

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Attach to Python Functions",
        "type": "debugpy",
        "request": "attach",
        "connect": {
            "host": "localhost",
            "port": 9091
        },
        "preLaunchTask": "func: host start"
    }
]

}

Вы получаете ошибку 'No job functions found в приложении-функции или локально?

Ikhtesam Afrin 27.06.2024 11:12

@IkhtesamAfrin во время локального забега.

rickvanveldhuisen 27.06.2024 11:52

Можете ли вы уточнить downloading function app, вы создаете функцию Python локально в коде vs и выполняете ее?

Ikhtesam Afrin 27.06.2024 11:54

Если да, то можете ли вы попробовать выполнить свою функцию, перейдя в «Выполнить» -> «Начать отладку в коде vs».

Ikhtesam Afrin 27.06.2024 11:56

У меня такое было на другом ноутбуке. Поскольку это был всего лишь POC, я не стал публиковать его на чем-то вроде github. Я сжал папку с функцией, перенес ее на другой ноутбук и распаковал.

rickvanveldhuisen 27.06.2024 11:57

Да, это должно работать, если ваша функция содержит код триггера Http по умолчанию. Можете ли вы попробовать «Выполнить» -> «Начать отладку в vs-коде», пожалуйста?

Ikhtesam Afrin 27.06.2024 11:59

Я только что это сделал и сначала получил сообщение об ошибке о версии Python. Я предполагаю, что это потому, что я перезапустил vs code и еще не вошел в виртуальную среду. Однако я также получаю пустое всплывающее окно с сообщением об ошибке «Открыть launch.json». Я вошел в виртуальную среду и все еще получаю проблему с версией Python. Должен ли я изменить это вручную в PATH?

rickvanveldhuisen 27.06.2024 12:01

Можете ли вы поделиться скриншотом структуры ваших папок?

Ikhtesam Afrin 27.06.2024 12:03

@IkhtesamAfrin Я добавил это в пост.

rickvanveldhuisen 27.06.2024 12:06

Можете ли вы поделиться своим кодом для файла launch.json. Мой файл launch.json выглядит вот так

Ikhtesam Afrin 27.06.2024 12:09

Насколько я вижу, у меня то же самое (добавлено в пост)

rickvanveldhuisen 27.06.2024 12:12

Можете ли вы поделиться точной ошибкой, которую вы получаете для версии Python? Также, если у вас появляется всплывающее окно Open launch.json, отмените его и проверьте. Можете ли вы попробовать это

Ikhtesam Afrin 27.06.2024 12:26

@IkhtesamAfrin Если я запущу виртуальную среду, перейду к запуску, а затем начну отладку, появится терминал с Found Python version 3.12.4 (py). Python 3.6.x to 3.9.x is required for this operation. Please install Python 3.6, 3.7, 3.8, or 3.9 and use a virtual environment to switch to Python 3.6, 3.7, 3.8, or 3.9. * The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command func host start" terminated with exit code: 1. * Terminal will be reused by tasks, press any key to close it

rickvanveldhuisen 27.06.2024 12:53

результаты старта Func Host:Found Python version 3.8.10 (py). Azure Functions Core Tools Core Tools Version: 3.0.5682 Commit hash: N/A (64-bit) Function Runtime Version: 3.22.0.0 [2024-06-27T10:53:51.980Z] No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.). For detailed output, run func with --verbose flag.

rickvanveldhuisen 27.06.2024 12:54

Я вижу, что вы используете очень старую версию основного инструмента, пожалуйста, обновите ее до последней. Я использую Azure Functions Core Tools Core Tools Version: 4.0.5801 Function Runtime Version: 4.34.1.22669

Ikhtesam Afrin 27.06.2024 13:00

Вероятно, в этом была проблема. По крайней мере, теперь я получаю реальные ошибки, связанные с кодом (которые действительно существуют).

rickvanveldhuisen 27.06.2024 13:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
16
85
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Моя проблема заключалась в том, что я использовал старую версию основных инструментов функций. Я обновил эту версию до версии 4 с помощью команды:

npm install -g azure-functions-core-tools@4 --unsafe-perm true

Спасибо @Ikhtesam Afrin, который помог мне с комментариями.

Ответ принят как подходящий

«Рабочие функции не найдены. Попробуйте сделать свои классы и методы должностей общедоступными. Если вы используете расширения привязки (например, Azure Storage, ServiceBus, таймеры и т. д.), убедитесь, что вы вызвали метод регистрации для расширений в своем стартовом коде (например, builder.AddAzureStorage(), builder.AddServiceBus( ),builder.AddTimers() и т. д.)'.

Чтобы избежать этой ошибки, выполните следующие действия:

  1. Используйте правильный функциональный код.
import azure.functions as func
import logging

app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@app.route(route = "http_trigger")
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )
  1. Обязательно используйте последнее расширение в файле host.json.
{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}
  1. Рекомендуется использовать версию V4 основных инструментов функций Azure. Вы можете установить его с помощью MSI или npm i -g azure-functions-core-tools@4 --unsafe-perm true, см. Версии основных инструментов функций Azure.

  2. Либо перейдите в «Выполнить» -> «Начать отладку в vs-коде», либо используйте команду func host start в терминале для выполнения вашей функции.

Вы получите ожидаемый ответ.

Другие вопросы по теме