Я разработал приложение-функцию 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"
}
]
}
@IkhtesamAfrin во время локального забега.
Можете ли вы уточнить downloading function app
, вы создаете функцию Python локально в коде vs и выполняете ее?
Если да, то можете ли вы попробовать выполнить свою функцию, перейдя в «Выполнить» -> «Начать отладку в коде vs».
У меня такое было на другом ноутбуке. Поскольку это был всего лишь POC, я не стал публиковать его на чем-то вроде github. Я сжал папку с функцией, перенес ее на другой ноутбук и распаковал.
Да, это должно работать, если ваша функция содержит код триггера Http по умолчанию. Можете ли вы попробовать «Выполнить» -> «Начать отладку в vs-коде», пожалуйста?
Я только что это сделал и сначала получил сообщение об ошибке о версии Python. Я предполагаю, что это потому, что я перезапустил vs code и еще не вошел в виртуальную среду. Однако я также получаю пустое всплывающее окно с сообщением об ошибке «Открыть launch.json». Я вошел в виртуальную среду и все еще получаю проблему с версией Python. Должен ли я изменить это вручную в PATH?
Можете ли вы поделиться скриншотом структуры ваших папок?
@IkhtesamAfrin Я добавил это в пост.
Можете ли вы поделиться своим кодом для файла launch.json. Мой файл launch.json выглядит вот так
Насколько я вижу, у меня то же самое (добавлено в пост)
Можете ли вы поделиться точной ошибкой, которую вы получаете для версии Python? Также, если у вас появляется всплывающее окно Open launch.json
, отмените его и проверьте. Можете ли вы попробовать это
@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
результаты старта 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.
Я вижу, что вы используете очень старую версию основного инструмента, пожалуйста, обновите ее до последней. Я использую Azure Functions Core Tools Core Tools Version: 4.0.5801 Function Runtime Version: 4.34.1.22669
Вероятно, в этом была проблема. По крайней мере, теперь я получаю реальные ошибки, связанные с кодом (которые действительно существуют).
Моя проблема заключалась в том, что я использовал старую версию основных инструментов функций. Я обновил эту версию до версии 4 с помощью команды:
npm install -g azure-functions-core-tools@4 --unsafe-perm true
Спасибо @Ikhtesam Afrin, который помог мне с комментариями.
«Рабочие функции не найдены. Попробуйте сделать свои классы и методы должностей общедоступными. Если вы используете расширения привязки (например, Azure Storage, ServiceBus, таймеры и т. д.), убедитесь, что вы вызвали метод регистрации для расширений в своем стартовом коде (например, builder.AddAzureStorage(), builder.AddServiceBus( ),builder.AddTimers() и т. д.)'.
Чтобы избежать этой ошибки, выполните следующие действия:
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
)
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Рекомендуется использовать версию V4 основных инструментов функций Azure. Вы можете установить его с помощью MSI или npm i -g azure-functions-core-tools@4 --unsafe-perm true
, см. Версии основных инструментов функций Azure.
Либо перейдите в «Выполнить» -> «Начать отладку в vs-коде», либо используйте команду func host start
в терминале для выполнения вашей функции.
Вы получите ожидаемый ответ.
Вы получаете ошибку
'No job functions found
в приложении-функции или локально?