Устранение ошибок Python в Функциях Azure

В этой статье содержатся сведения, которые помогут вам устранять ошибки в функциях Python в Функции Azure. В этой статье поддерживаются как модели программирования версии 1, так и версии 2. Выберите модель, которую вы хотите использовать в селекторе в верхней части статьи.

Примечание.

Модель программирования Python версии 2 поддерживается только в среде выполнения функций 4.x. Дополнительные сведения см. в обзоре версий среды выполнения Функций Azure.

Ниже приведены разделы по устранению неполадок для распространенных проблем в функциях Python:

Устранение неполадок: ModuleNotFoundError

Инструкции из этого раздела помогут вам устранить ошибки, связанные с модулями, в вашем приложении-функции Python. Эти ошибки обычно приводят к появлению следующих сообщений об ошибках в Функциях Azure.

Исключение: ModuleNotFoundError: Не найден модуль с именем "module_name".

Эта ошибка возникает, когда приложению-функции Python не удается загрузить модуль Python. Основными причинами этой ошибки является одна из следующих проблем:

Просмотр файлов проекта

Чтобы узнать фактическую причину проблемы, необходимо получить файлы проекта Python, которые выполняются в вашем приложении-функции. Если у вас нет файлов проекта на локальном компьютере, их можно получить одним из следующих способов.

  • Если приложение-функция имеет параметр приложения и его значение является URL-адресом WEBSITE_RUN_FROM_PACKAGE , скачайте файл, скопируйте и вставьте URL-адрес в браузер.
  • Если в приложении-функции для WEBSITE_RUN_FROM_PACKAGE задано значение 1, перейдите к https://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackages и скачайте файл по URL-адресу последней версии href.
  • Если приложение-функция не имеет ни одного из предыдущих параметров приложения, перейдите https://<app-name>.scm.azurewebsites.net/api/settings и найдите URL-адрес в разделе SCM_RUN_FROM_PACKAGE. Скачайте файл, скопируйте и вставьте URL-адрес в браузер.
  • Если рекомендации решают проблему, перейдите в https://<app-name>.scm.azurewebsites.net/DebugConsole и просмотрите содержимое в разделе /home/site/wwwroot.

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

Диагностировать ошибку ModuleNotFoundError

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

Не удается найти пакет

Перейдите на страницу .python_packages/lib/python3.6/site-packages/<package-name> или .python_packages/lib/site-packages/<package-name>. Если путь к файлу не существует, скорее всего, этот путь является основной причиной проблемы.

Использование сторонних или устаревших средств во время развертывания может вызвать эту проблему.

Чтобы устранить эту проблему, см. Включение удаленной сборки или Сборка нативных зависимостей.

Пакет не сопоставляется с подходящим Linux wheel

Перейдите на страницу .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info или .python_packages/lib/site-packages/<package-name>-<version>-dist-info. Откройте файл wheel в привычном текстовом редакторе и проверьте раздел Tag:. Проблема может быть в том, что значение тега не содержит Linux.

Функции Python выполняются только в Linux в Azure. Среда выполнения Функций версии 2.x выполняется в Debian Stretch, а среда выполнения версии 3.x выполняется в Debian Buster. Артефакт должен содержать правильные двоичные файлы Linux. При использовании флага --build local в Core Tools, сторонних или устаревших средствах может потребоваться использовать старые двоичные файлы.

Чтобы устранить проблему, см. раздел "Включить удаленную сборку " или "Сборка собственных зависимостей".

Пакет несовместим с версией интерпретатора Python

Перейдите на страницу .python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info или .python_packages/lib/site-packages/<package-name>-<version>-dist-info. В текстовом редакторе откройте файл METADATA и проверьте классификаторы: раздел. Если раздел не содержит Python :: 3, , Python :: 3.10Python :: 3.11Python :: 3.12или , версия пакета либо слишком старая, либоPython :: 3.13, скорее всего, она уже не поддерживается.

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

Чтобы устранить проблему, ознакомьтесь с обновлением пакета до последней версии или заменой пакета эквивалентами.

Пакет конфликтует с другими пакетами

Если вы проверили правильность разрешения пакета с соответствующими колесами Linux, может возникнуть конфликт с другими пакетами. В некоторых пакетах документация PyPi может уточнить несовместимые модули. Например, в azure 4.0.0 вы найдете следующее утверждение:

Этот пакет несовместим с хранилищем Azure. Если вы установили хранилище Azure или установили azure 1.x/2.x и не удалили хранилище Azure, сначала необходимо удалить хранилище Azure.

Документацию по вашей версии пакета можно найти на странице https://pypi.org/project/<package-name>/<package-version>.

Чтобы устранить проблему, ознакомьтесь с обновлением пакета до последней версии или заменой пакета эквивалентами.

Пакет поддерживает только платформы Windows и macOS

Откройте requirements.txt в текстовом редакторе и проверьте пакет в https://pypi.org/project/<package-name>. Некоторые пакеты выполняются только на платформах Windows и macOS. Например, pywin32 работает только в Windows.

Ошибка Module Not Found может не возникать при использовании Windows или macOS для локальной разработки. Однако пакет не импортируется в Функции Azure, где во время выполнения используется Linux. Эта проблема, скорее всего, будет вызвана использованием pip freeze экспорта виртуальной среды в requirements.txt с компьютера Windows или macOS во время инициализации проекта.

Чтобы устранить проблему, см. Заменить пакет эквивалентами или Создать requirements.txt вручную.

Устранение ошибки ModuleNotFoundError

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

Включение удаленной сборки

Убедитесь, что удаленная сборка включена. То, как именно это обеспечить, зависит от метода развертывания.

Убедитесь, что установлена последняя версия расширения Функций Azure для Visual Studio Code. Убедитесь, что vscode/settings.json файл существует, и он содержит параметр "azureFunctions.scmDoBuildDuringDeployment": true. Если это не так, создайте файл с включенным параметром azureFunctions.scmDoBuildDuringDeployment и повторно разверните проект.

Создание собственных зависимостей

Убедитесь, что установлены последние версии Docker и Функции Azure Core Tools. Перейдите в папку проекта локальной функции и используйте func azure functionapp publish <app-name> --build-native-deps для развертывания.

Обновление пакета до последней версии

В последней https://pypi.org/project/<package-name>версии пакета проверьте классификаторы: раздел. Пакет должен быть OS Independent или совместим с POSIX или POSIX :: Linux в разделе Операционная система. Кроме того, язык программирования должен содержать: Python :: 3, Python :: 3.10, Python :: 3.11, Python :: 3.12или Python :: 3.13.

Если эти элементы пакета верны, можно обновить пакет до последней версии, изменив строку <package-name>~=<latest-version> в requirements.txt.

Обработка файла requirements.txt вручную

Некоторые разработчики используют pip freeze > requirements.txt, чтобы создать список пакетов Python для своих сред разработки. Хотя эта удобная функция должна работать в большинстве случаев, в сценариях межплатформенного развертывания могут возникать проблемы, например когда разработка функций выполняется локально в Windows или macOS, а публикуются они в приложении-функции, работающем в Linux. В этом сценарии pip freeze может привести к непредвиденным зависимостям от операционной системы или зависимостям от локальной среды разработки. Эти зависимости могут нарушить работу приложения-функции Python при работе в Linux.

Рекомендуется проверить инструкцию импорта из каждого файла .py в исходном коде проекта, а затем проверить только модули в файле requirements.txt . Эта практика гарантирует, что разрешение пакетов можно правильно обрабатывать в разных операционных системах.

Замена пакета на эквивалент

Во-первых, ознакомьтесь с последней версией пакета https://pypi.org/project/<package-name>. Этот пакет обычно имеет собственную страницу GitHub. Перейдите в раздел "Проблемы " на сайте GitHub и выполните поиск, чтобы узнать, устранена ли проблема. Если оно было исправлено, обновите пакет до последней версии.

Иногда пакет может быть интегрирован в стандартную библиотеку Python (напримерpathlib). Если это так, так как Функции Azure предоставляет определенное распределение Python (Python 3.10, Python 3.11, Python 3.12 и Python 3.13), удалите пакет из файла requirements.txt.

Однако если вы обнаружите, что проблема не устранена, и вы находитесь в крайнем сроке, мы рекомендуем вам выполнить некоторые исследования, чтобы найти аналогичный пакет для вашего проекта. Как правило, сообщество Python предоставляет широкий спектр аналогичных библиотек, которые можно использовать.

Отключение флага изоляции зависимостей

Присвойте параметру приложения PYTHON_ISOLATE_WORKER_DEPENDENCIES значение 0.


Устранение неполадок: не удается импортировать cygrpc

Этот раздел поможет устранять неполадки, связанные с 'cygrpc', в приложении функций Python. Эти ошибки обычно приводят к появлению следующих сообщений об ошибках в Функциях Azure.

Не удается импортировать имя cygrpc из "grpc._cython"

Эта ошибка возникает, когда приложение-функция Python не запускается с подходящим интерпретатором Python. Основными причинами этой ошибки является одна из следующих проблем:

Диагностика ошибки ссылки на "cygrpc"

Существует несколько возможных причин ошибок, ссылающихся на cygrpc, которые подробно рассматриваются в этом разделе.

Интерпретатор Python не соответствует архитектуре ОС.

Это несоответствие, скорее всего, вызвано 32-разрядным интерпретатором Python, установленным в 64-разрядной операционной системе.

Если вы работаете в операционной системе x64, убедитесь, что Python версии 3.10, 3.11, 3.12 или 3.13 интерпретатор также является 64-разрядной версией.

Вы можете проверить бит интерпретатора Python, выполнив следующие команды:

В Windows в PowerShell выполните команду py -c 'import platform; print(platform.architecture()[0])'.

В оболочке, аналогичной Unix, выполните команду python3 -c 'import platform; print(platform.architecture()[0])'.

Если между битами интерпретатора Python и архитектурой операционной системы существует несоответствие, скачайте соответствующий интерпретатор Python из Python Software Foundation.

Интерпретатор Python не поддерживается Функции Azure Python Worker

Обработчик Python в Функции Azure поддерживает только определённые версии Python.

Проверьте, соответствует ли интерпретатор Python ожидаемой версии py --version в Windows или python3 --version в таких системах, как Unix. Убедитесь, что результат возврата является одним из поддерживаемых версий Python.

Если версия интерпретатора Python не соответствует требованиям для Функции Azure, вместо этого скачайте версию интерпретатора Python, поддерживаемую функциями из Python Software Foundation.


Устранение неполадок: python завершился с кодом 137

Ошибки с кодом 137 обычно вызваны проблемами нехватки памяти в вашем приложении-функции Python. В результате отображается следующее сообщение об ошибке Функций Azure:

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException : python завершился с кодом 137

Эта ошибка возникает, когда операционная система принудительно завершает работу приложения функций Python с помощью сигнала SIGKILL. Этот сигнал обычно указывает на ошибку нехватки памяти в вашем процессе Python. Платформа Функции Azure имеет ограничение службы, которое завершает любые приложения-функции, превышающие это ограничение.

Чтобы проанализировать узкие места памяти в приложении-функции, см. раздел "Профиль приложения-функции Python" в локальной среде разработки.


Устранение неполадок: python завершился с кодом 139

Инструкции из этого раздела помогут вам устранить ошибки сегментации в приложении-функции Python. Эти ошибки обычно приводят к появлению следующих сообщений об ошибках в Функциях Azure.

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException : python завершился с кодом 139

Эта ошибка возникает, когда приложение-функция на Python принудительно завершается операционной системой по сигналу SIGSEGV. Этот сигнал указывает на нарушение сегментации памяти, что может привести к неожиданному чтению или записи в область ограниченной памяти. В следующих разделах мы предоставили список наиболее вероятных первопричин.

Регрессия, вызванная сторонними пакетами

В requirements.txt файле приложения-функции незакреченный пакет обновляется до последней версии во время каждого развертывания в Azure. Обновления пакетов могут привести к регрессиям, которые повлияют на ваше приложение. Чтобы восстановиться после таких проблем, закомментируйте инструкции импорта, отключите ссылки на пакет или закрепите пакет до предыдущей версии в requirements.txt.

Извлечение данных из PKL-файла неправильного формата

Если ваше приложение-функций использует библиотеку Python pickle для загрузки объекта Python из файла .pkl, возможно, этот файл содержит неправильно сформированную строку байтов или недопустимую адресную ссылку. Чтобы устранить эту проблему, попробуйте закомментировать функцию pickle.load().

Конфликт подключений Pyodbc

Если функциональное приложение использует драйвер базы данных ODBC pyodbc, возможно, что открыто несколько подключений в одном функциональном приложении. Чтобы избежать этой проблемы, используйте шаблон singleton и убедитесь, что в приложении-функции используется только одно подключение pyodbc.

Подсказка

Рассмотрите возможность использования mssql-python, официального драйвера Python майкрософт для SQL Server, который обеспечивает встроенную поддержку проверки подлинности Microsoft Entra и не требует ручного управления драйверами ODBC.


Сбой триггеров синхронизации

Sync triggers failed Ошибка может быть вызвана несколькими проблемами. Одна из возможных причин — конфликт между определяемыми клиентом зависимостями и встроенными модулями Python при выполнении функций в плане Служба приложений. Дополнительные сведения см. в разделе "Управление пакетами".


Устранение неполадок: не удалось загрузить файл или сборку

Эта ошибка отображается при локальном запуске с помощью модели программирования версии 2. Эта ошибка вызвана известной проблемой, которую необходимо устранить в предстоящем выпуске.

Это пример сообщения для этой ошибки:

DurableTask.Netherite.AzureFunctions: не удалось загрузить файл или сборку Microsoft.Azure.WebJobs.Extensions.DurableTask, Version=2.0.0.0, Culture=neutral, PublicKeyToken=014045d636e89289.
Системе не удается найти указанный файл.

Ошибка возникает из-за проблемы с кэшем пакета расширений. Чтобы устранить проблему, выполните следующую команду, --verbose чтобы просмотреть дополнительные сведения:

func host start --verbose

Скорее всего, вы столкнулись с этой проблемой кэширования, если видите в журнале загрузки расширения запись вида Loading startup extension <>, после которой не следует Loaded extension <>.

Для разрешения этой проблемы:

  1. Найдите путь, выполнив следующую .azure-functions-core-tools команду:

    func GetExtensionBundlePath
    
  2. Удалите каталог .azure-functions-core-tools.

    rm -r <insert path>/.azure-functions-core-tools
    

Каталог кэша повторно создается при повторном запуске основных инструментов.

Устранение неполадок: не удается определить подключение к хранилищу Azure

Вы можете увидеть эту ошибку в локальном выводе в виде следующего сообщения:

Microsoft.Azure.WebJobs.Extensions.DurableTask: Не удается найти подключение к службе хранилища Azure с именем "Storage".
значение не может быть равно NULL. (Параметр "provider")

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

  • Используйте эмулятор хранения, например Azurite. Этот вариант является хорошим, если вы не планируете использовать учетную запись хранения в приложении-функции.

  • Создайте учетную запись хранения данных и добавьте строку подключения в переменную среды AzureWebJobsStorage в файле localsettings.json. Используйте этот параметр, если вы используете триггер учетной записи хранения или привязку с приложением, или если у вас есть существующая учетная запись хранения. Чтобы приступить к работе, см. Создание учетной записи хранения.

Функции, которые не найдены после развертывания

Существует несколько распространенных проблем сборки, которые могут привести к тому, что функции Python не будут найдены узлом после, по-видимому, успешного развертывания:

  • Пул агентов должен работать в Ubuntu, чтобы гарантировать правильность восстановления пакетов на этапе сборки. Убедитесь, что шаблон развертывания требует среды Ubuntu для сборки и развертывания.

  • Если приложение-функция находится не в корне исходного репозитория, убедитесь, что на шаге pip install указан правильный путь к месту, где нужно создать папку .python_packages. Помните, что это расположение учитывает регистр, например в этом примере команды:

    pip install --target="./FunctionApp1/.python_packages/lib/site-packages" -r ./FunctionApp1/requirements.txt
    
  • Шаблон должен создать пакет развертывания, который можно загрузить в /home/site/wwwroot. В Azure Pipelines это выполняется с помощью задачи ArchiveFiles.

Проблемы разработки в портале Azure

При использовании портал Azure учитывайте эти известные проблемы и их обходные пути.

  • Чтобы удалить функцию из приложения-функции на портале, удалите код функции из самого файла. Кнопка "Удалить " не работает, чтобы удалить функцию при использовании модели программирования Python версии 2.
  • При создании функции в портале вы можете увидеть предупреждение с рекомендацией использовать другой инструмент разработки. Существует несколько сценариев, в которых невозможно изменить код на портале, в том числе при обнаружении синтаксической ошибки. В этих сценариях используйте Visual Studio Code или Функции Azure Core Tools для разработки и публикации кода функции.

Следующие шаги

Если устранить проблему не удается, обратитесь к команде Функции Azure: