Azure Functions에서 Python 오류 문제 해결

이 문서에서는 Azure Functions에서 Python 함수의 오류 문제를 해결하는 데 도움이 되는 정보를 제공합니다. 이 문서는 v1 및 v2 프로그래밍 모델을 모두 지원합니다. 문서 맨 위에 있는 선택기에서 사용하려는 모델을 선택합니다.

참고 항목

Python v2 프로그래밍 모델은 4.x 함수 런타임에서만 지원됩니다. 자세한 내용은 Azure Functions 런타임 버전 개요를 참조하세요.

다음은 Python 함수의 일반적인 문제에 대한 문제 해결 섹션입니다.

문제 해결: ModuleNotFoundError

이 섹션에서는 Python 함수 앱에서 모듈 관련 오류를 해결하는 데 도움이 됩니다. 이러한 오류는 일반적으로 다음과 같은 Azure Functions 오류 메시지를 발생합니다.

예외: ModuleNotFoundError: 'module_name'이라는 모듈이 없습니다.

이 오류는 Python 함수 앱이 Python 모듈을 로드하지 못할 때 발생합니다. 이 오류의 근본 원인은 다음과 같은 문제 중 하나입니다.

프로젝트 파일 보기

문제의 실제 원인을 확인하려면 함수 앱에서 실행되는 Python 프로젝트 파일을 가져와야 합니다. 로컬 컴퓨터에 프로젝트 파일이 없는 경우 다음 방법 중 하나로 가져올 수 있습니다.

  • 함수 앱에 앱 설정이 WEBSITE_RUN_FROM_PACKAGE 있고 해당 값이 URL인 경우 URL을 복사하여 브라우저에 붙여넣어 파일을 다운로드합니다.
  • 함수 앱이 WEBSITE_RUN_FROM_PACKAGE 설정된 1경우 최신 href URL로 https://<app-name>.scm.azurewebsites.net/api/vfs/data/SitePackages 이동하여 파일을 다운로드합니다.
  • 함수 앱에 이전 앱 설정 중 하나가 없는 경우 다음으로 https://<app-name>.scm.azurewebsites.net/api/settings 이동하여 아래 SCM_RUN_FROM_PACKAGE의 URL을 찾습니다. URL을 복사하여 브라우저에 붙여넣어 파일을 다운로드합니다.
  • 제안이 문제를 해결하는 경우 다음으로 https://<app-name>.scm.azurewebsites.net/DebugConsole 이동하여 아래의 콘텐츠를 /home/site/wwwroot확인합니다.

이 문서의 나머지 부분을 통해 함수 앱의 콘텐츠를 검사하고 근본 원인을 식별하고 특정 문제를 해결하여 이 오류의 잠재적 원인을 해결할 수 있습니다.

ModuleNotFoundError 진단

이 섹션에서는 모듈 관련 오류의 잠재적 근본 원인을 자세히 설명합니다. 가능한 근본 원인을 파악한 후 관련된 완화 방법으로 이동할 수 있습니다.

패키지를 찾을 수 없습니다.

이동 또는 .python_packages/lib/site-packages/<package-name>..python_packages/lib/python3.6/site-packages/<package-name> 파일 경로가 없으면 이 누락된 경로가 근본 원인일 수 있습니다.

배포 중에 타사 또는 오래된 도구를 사용하면 이 문제가 발생할 수 있습니다.

이 문제를 완화하려면 원격 빌드 또는 빌드 네이티브 종속성 사용을 참조하세요.

패키지가 적절한 Linux 휠로 확인되지 않음

이동 또는 .python_packages/lib/site-packages/<package-name>-<version>-dist-info..python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info 원하는 텍스트 편집기를 사용하여 휠 파일을 열고 Tag: 섹션을 검사. 태그 값에 Linux가 포함되지 않는 문제가 있을 수 있습니다.

Python 함수는 Azure의 Linux에서만 실행됩니다. Functions 런타임 v2.x는 Debian Stretch에서 실행되고 v3.x 런타임은 Debian Buster에서 실행됩니다. 아티팩트에서 올바른 Linux 이진 파일을 포함해야 합니다. 핵심 도구, 타사 또는 오래된 도구에서 플래그를 사용하면 --build local 이전 이진 파일이 사용될 수 있습니다.

문제를 완화하려면 원격 빌드 또는 빌드 네이티브 종속성 사용을 참조하세요.

패키지가 Python 인터프리터 버전과 호환되지 않습니다.

이동 또는 .python_packages/lib/site-packages/<package-name>-<version>-dist-info..python_packages/lib/python3.6/site-packages/<package-name>-<version>-dist-info 텍스트 편집기에서 메타데이터 파일을 열고 분류자: 섹션을 검사. 섹션Python :: 3Python :: 3.8Python :: 3.6Python :: 3.7에 패키지 버전이 너무 오래되었거나 Python :: 3.9이미 기본 테넌트에서 벗어났습니다.

Azure Portal에서 함수 앱의 Python 버전을 검사 수 있습니다. 함수 앱의 개요 리소스 페이지로 이동하여 런타임 버전을 찾습니다. 런타임 버전은 Azure Functions 런타임 버전 개요설명된 대로 Python 버전을 지원합니다.

문제를 완화하려면 패키지를 최신 버전으로 업데이트하거나 패키지를 동등한 버전으로 바꾸기를 참조하세요.

패키지가 다른 패키지와 충돌합니다.

적절한 Linux 휠을 사용하여 패키지가 올바르게 해결되었는지 확인한 경우 다른 패키지와 충돌할 수 있습니다. 특정 패키지에서 PyPi 설명서는 호환되지 않는 모듈을 명확히 할 수 있습니다. 예를 들어 다음 azure 4.0.0문을 찾을 수 있습니다.

이 패키지는 azure-Storage와 호환되지 않습니다. azure-storage를 설치했거나 azure 1.x/2.x를 설치하고 azure-storage를 제거하지 않은 경우 먼저 azure-Storage를 제거해야 합니다.

에서 패키지 버전 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를 사용하는 경우 오류가 발생하지 않을 수 있습니다. 그러나 패키지는 런타임에 Linux를 사용하는 Azure Functions에서 가져오지 못합니다. 이 문제는 프로젝트 초기화 중에 가상 환경을 Windows 또는 macOS 컴퓨터에서 requirements.txt 내보내는 데 사용 pip freeze 해서 발생할 수 있습니다.

문제를 완화하려면 패키지를 동등한 항목 또는 Handcraft requirements.txt 바꿉니다.

ModuleNotFoundError 완화

다음은 모듈 관련 문제에 대한 잠재적 완화입니다. 이전에 멘션 진단을 사용하여 이러한 완화 중 어떤 완화를 시도할지 결정합니다.

원격 빌드 사용

원격 빌드가 사용하도록 설정되어 있는지 확인합니다. 확인하는 방법은 배포 방법에 따라 달라집니다.

Visual Studio Code용 Azure Functions 확장의 최신 버전이 설치되어 있는지 확인합니다. .vscode/settings.json 파일이 있고 설정"azureFunctions.scmDoBuildDuringDeployment": true이 포함되어 있는지 확인합니다. 그렇지 않은 경우 설정이 설정된 파일을 azureFunctions.scmDoBuildDuringDeployment 만든 다음 프로젝트를 다시 배포합니다.

네이티브 종속성 빌드

Docker 및 Azure Functions 핵심 도구 의 최신 버전이 모두 설치되어 있는지 확인합니다. 로컬 함수 프로젝트 폴더로 이동하여 배포에 사용합니다 func azure functionapp publish <app-name> --build-native-deps .

패키지를 최신 버전으로 업데이트

최신 패키지 버전https://pypi.org/project/<package-name>에서 분류자: 섹션을 검사. 패키지는 운영 체제와 POSIXPOSIX :: Linux 호환되거나 호환되어야 OS Independent합니다. 또한 프로그래밍 언어에는 다음이 Python :: 3.9Python :: 3.8Python :: 3.7Python :: 3.6포함되어야 합니다. Python :: 3

이러한 패키지 항목이 올바른 경우 requirements.txt 줄을 <package-name>~=<latest-version> 변경하여 패키지를 최신 버전으로 업데이트할 수 있습니다.

수공예 requirements.txt

일부 개발자는 개발 환경에 대한 Python 패키지 목록을 생성하는 데 사용합니다 pip freeze > requirements.txt . 대부분의 경우 이러한 편의가 작동해야 하지만 Windows 또는 macOS에서 로컬로 함수를 개발하지만 Linux에서 실행되는 함수 앱에 게시하는 것과 같은 플랫폼 간 배포 시나리오에는 문제가 있을 수 있습니다. 이 시나리오 pip freeze 에서는 로컬 개발 환경에 대한 예기치 않은 운영 체제별 종속성 또는 종속성을 도입할 수 있습니다. 이러한 종속성은 Linux에서 실행 중일 때 Python 함수 앱을 중단할 수 있습니다.

모범 사례는 프로젝트 소스 코드의 각 .py 파일에서 import 문을 검사 다음 requirements.txt 파일의 모듈에서만 검사 것입니다. 이 방법은 패키지의 해상도가 다른 운영 체제에서 제대로 처리될 수 있도록 보장합니다.

패키지를 동등한 항목으로 바꿉니다.

먼저 .https://pypi.org/project/<package-name> 이 패키지에는 일반적으로 고유한 GitHub 페이지가 있습니다. GitHub의 문제 섹션으로 이동하여 문제가 해결되었는지 검색합니다. 수정된 경우 패키지를 최신 버전으로 업데이트합니다.

경우에 따라 패키지가 Python 표준 라이브러리(예: pathlib)에 통합되었을 수 있습니다. 그렇다면 Azure Functions(Python 3.6, Python 3.7, Python 3.8 및 Python 3.9)에서 특정 Python 배포를 제공하기 때문에 requirements.txt 파일의 패키지를 제거해야 합니다.

그러나 문제가 해결되지 않았고 마감일에 있는 경우 프로젝트에 대한 유사한 패키지를 찾기 위해 몇 가지 연구를 수행하는 것이 좋습니다. 일반적으로 Python 커뮤니티는 사용할 수 있는 다양한 유사한 라이브러리를 제공합니다.

종속성 격리 플래그 사용 안 함

애플리케이션 설정 PYTHON_ISOLATE_WORKER_DEPENDENCIES0 값으로 설정합니다.


문제 해결: 'cygrpc'를 가져올 수 없습니다.

이 섹션에서는 Python 함수 앱에서 'cygrpc' 관련 오류를 해결하는 데 도움이 됩니다. 이러한 오류는 일반적으로 다음과 같은 Azure Functions 오류 메시지를 발생합니다.

'grpc._cython'에서 이름 'cygrpc'를 가져올 수 없습니다.

이 오류는 Python 함수 앱이 적절한 Python 인터프리터로 시작하지 못할 때 발생합니다. 이 오류의 근본 원인은 다음과 같은 문제 중 하나입니다.

'cygrpc' 참조 오류 진단

참조하는 오류 cygrpc의 몇 가지 가능한 원인이 있습니다. 이 섹션에 자세히 설명되어 있습니다.

Python 인터프리터가 OS 아키텍처를 잘못 분석합니다.

이 불일치는 32비트 Python 인터프리터가 64비트 운영 체제에 설치되어 있기 때문일 수 있습니다.

x64 운영 체제에서 실행하는 경우 Python 버전 3.6, 3.7, 3.8 또는 3.9 인터프리터도 64비트 버전에 있는지 확인합니다.

다음 명령을 실행하여 Python 인터프리터 비트를 검사 수 있습니다.

PowerShell의 Windows에서 .를 실행합니다 py -c 'import platform; print(platform.architecture()[0])'.

Unix와 유사한 셸에서 실행 python3 -c 'import platform; print(platform.architecture()[0])'합니다.

Python 인터프리터 비트와 운영 체제 아키텍처가 일치하지 않는 경우 Python Software Foundation에서 적절한 Python 인터프리터를 다운로드합니다.

Azure Functions Python Worker가 Python 인터프리터를 지원하지 않음

Azure Functions Python 작업자는 특정 Python 버전지원합니다.

Python 인터프리터가 Windows 또는 python3 --version Unix와 유사한 시스템에서 예상 버전 py --version 과 일치하는지 확인합니다. 반환 결과가 지원되는 Python 버전 중 하나인지 확인합니다.

Python 인터프리터 버전이 Azure Functions에 대한 요구 사항을 충족하지 않는 경우 대신 Python Software Foundation에서 Functions에서 지원하는 Python 인터프리터 버전을 다운로드합니다.


문제 해결: python이 코드 137로 종료됨

코드 137 오류는 일반적으로 Python 함수 앱의 메모리 부족 문제로 인해 발생합니다. 그 결과 다음과 같은 Azure Functions 오류 메시지가 표시됩니다.

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException: python이 코드 137로 종료됨

이 오류는 Python 함수 앱이 신호를 사용하여 운영 체제에 의해 강제로 종료되는 경우에 SIGKILL 발생합니다. 해당 신호는 일반적으로 Python 프로세스의 메모리 부족 오류를 나타냅니다. Azure Functions 플랫폼에는 이 제한을 초과하는 함수 앱을 종료하는 서비스 제한이 있습니다.

함수 앱에서 메모리 병목 상태를 분석하려면 로컬 개발 환경에서 Python 함수 앱 프로파일을 참조하세요.


문제 해결: python이 코드 139로 종료됨

이 섹션에서는 Python 함수 앱에서 분할 오류 오류를 해결하는 데 도움이 됩니다. 이러한 오류는 일반적으로 다음과 같은 Azure Functions 오류 메시지를 발생합니다.

Microsoft.Azure.WebJobs.Script.Workers.WorkerProcessExitException: python이 코드 139로 종료됨

이 오류는 Python 함수 앱이 신호를 사용하여 운영 체제에 의해 강제로 종료되는 경우에 SIGSEGV 발생합니다. 이 신호는 메모리 구분 위반을 나타내며, 이로 인해 제한된 메모리 영역에서 예기치 않은 읽기 또는 쓰기가 발생할 수 있습니다. 다음 섹션에서는 일반적인 근본 원인 목록을 제공합니다.

타사 패키지의 회귀

함수 앱의 requirements.txt 파일에서 고정되지 않은 패키지는 Azure에 배포할 때마다 최신 버전으로 업그레이드됩니다. 패키지 업데이트는 잠재적으로 앱에 영향을 주는 회귀를 발생시킬 수 있습니다. 이러한 문제를 복구하려면 import 문을 주석으로 처리하거나 패키지 참조를 사용하지 않도록 설정하거나 패키지를 requirements.txt 이전 버전에 고정합니다.

잘못된 형식의 .pkl 파일에서 선택 취소

함수 앱이 Python pickle 라이브러리를 사용하여 .pkl 파일에서 Python 개체를 로드하는 경우 파일에 잘못된 형식의 바이트 문자열 또는 잘못된 주소 참조가 포함될 수 있습니다. 이 문제를 복구하려면 함수를 주석으로 처리해 pickle.load() 보세요.

Pyodbc 연결 충돌

함수 앱이 인기 있는 ODBC 데이터베이스 드라이버 pyodbc를 사용하는 경우 단일 함수 앱 내에서 여러 연결이 열려 있는 것일 수 있습니다. 이 문제를 방지하려면 싱글톤 패턴을 사용하고 함수 앱에서 하나의 pyodbc 연결만 사용되도록 합니다.


동기화 트리거 실패

이 오류 Sync triggers failed 는 몇 가지 문제로 인해 발생할 수 있습니다. 한 가지 잠재적인 원인은 App Service 계획에서 함수를 실행할 때 고객 정의 종속성과 Python 기본 제공 모듈 간의 충돌입니다. 자세한 내용은 패키지 관리를 참조하세요.


문제 해결: 파일 또는 어셈블리를 로드할 수 없음

v2 프로그래밍 모델을 사용하여 로컬로 실행하는 경우 이 오류를 확인할 수 있습니다. 이 오류는 향후 릴리스에서 해결될 알려진 문제로 인해 발생합니다.

이 오류에 대한 예제 메시지입니다.

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
    

Core Tools를 다시 실행할 때 캐시 디렉터리가 다시 만들어집니다.

문제 해결: Azure Storage 연결을 확인할 수 없음

로컬 출력에 다음 메시지로 이 오류가 표시될 수 있습니다.

Microsoft.Azure.WebJobs.Extensions.DurableTask: 'Storage'라는 Azure Storage 연결을 확인할 수 없습니다.
값은 Null일 수 없습니다. (매개 변수 'provider')

이 오류는 번들에서 로컬로 확장을 로드하는 방식의 결과입니다. 이 오류를 해결하려면 다음 작업 중 하나를 수행합니다.

  • Azurite와 같은 스토리지 에뮬레이터를 사용합니다. 이 옵션은 함수 애플리케이션에서 스토리지 계정을 사용할 계획이 없는 경우에 적합합니다.

  • 스토리지 계정을 만들고 localsettings.json 파일의 환경 변수에 AzureWebJobsStorage연결 문자열 추가합니다. 애플리케이션에서 스토리지 계정 트리거 또는 바인딩을 사용하거나 기존 스토리지 계정이 있는 경우 이 옵션을 사용합니다. 시작하려면 스토리지 계정 만들기를 참조 하세요.

Azure Portal의 개발 문제

Azure Portal을 사용하는 경우 다음과 같은 알려진 문제 및 해결 방법을 고려합니다.

  • 포털에서 함수 코드를 작성하기 위한 일반적인 제한 사항이 있습니다. 자세한 내용은 Azure Portal의 개발 제한을 참조하세요.
  • 포털의 함수 앱에서 함수를 삭제하려면 파일 자체에서 함수 코드를 제거합니다. 삭제 단추는 Python v2 프로그래밍 모델을 사용할 때 함수를 제거하는 데 작동하지 않습니다.
  • 포털에서 함수를 만들 때 개발을 위해 다른 도구를 사용하도록 훈계를 받을 수 있습니다. 구문 오류가 검색된 경우를 포함하여 포털에서 코드를 편집할 수 없는 몇 가지 시나리오가 있습니다. 이러한 시나리오에서는 Visual Studio Code 또는 Azure Functions Core Tools를 사용하여 함수 코드를 개발하고 게시합니다.

다음 단계

문제를 해결할 수 없는 경우 Azure Functions 팀에 문의하세요.