pip를 사용하여 컴파일된 코드가 포함된 Python 패키지를 설치했는데, 현재 AWS Lambda 함수에서 “Unable to import module” 오류를 반환합니다.
간략한 설명
NumPy 및 pandas와 같은 컴파일된 코드를 포함하는 Python 패키지는 기본적으로 Lambda 런타임과 항상 호환되지는 않습니다. pip를 사용하여 이러한 패키지를 설치하면 패키지는 로컬 시스템의 아키텍처에 맞는 module-name 패키지를 다운로드하여 컴파일합니다. Linux 운영 체제(OS)를 사용하지 않는 경우 배포 패키지가 Lambda Python 런타임과 호환되지 않게 됩니다.
배포 패키지 또는 계층이 비 Linux OS의 Lambda와 호환되도록 하려면 ** manylinux2014를\ --platform 파라미터의 ** 값으로 사용하여 ** pip install 명령을 ** 실행합니다. ****
참고: macOS --platform 태그는 작동하지 않습니다. 예를 들어 win_amd64 및 macosx_10_6_intel 태그는 Lambda와 호환되는 배포 패키지를 설치하지 않습니다.
해결 방법
**참고:**다음 예제 프로시저는 x86_64 아키텍처에서 실행되는 Lambda Python 3.9 런타임용 pandas를 설치하는 방법을 보여줍니다.
-
명령 프롬프트를 엽니다. 그런 다음, 다음 pip 명령을 실행하여 버전 19.3.0 이상의 pip 버전을 사용하고 있는지 확인합니다:
pip --version
pip 버전 19.3.0 이전의 pip 버전을 사용하는 경우 최신 버전의 pip로 업그레이드하세요:
python3.9 -m pip install --upgrade pip
-
사전 컴파일된 Python 패키지의 .whl 파일을 Lambda 함수의 프로젝트 디렉터리에 종속 항목으로 설치합니다:
중요:****my-lambda-function을 함수의 프로젝트 디렉터리 이름으로 바꿉니다.
pip install \
--platform manylinux2014_x86_64 \
--target=my-lambda-function \
--implementation cp \
--python-version 3.9 \
--only-binary=:all: --upgrade \
pandas
-
Lambda 함수의 프로젝트 디렉터리를 엽니다. macOS를 사용하는 경우 다음 명령을 실행합니다:
cd my-lambda-function
-
텍스트 편집기에서 lambda_function.py라는 새 파일을 생성합니다. 그런 다음, 다음 예제 코드를 복사하여 파일에 붙여넣습니다:
import numpy as np
import pandas as pd
def lambda_handler(event, context):
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=["a", "b", "c"])
number = np.pi
print(df2)
print(number)
이 파일을 Lambda 함수의 프로젝트 디렉터리에 저장합니다.
-
설치된 모든 라이브러리와 소스 코드를 포함하는 Lambda 배포 패키지 .zip 파일 아카이브를 생성합니다:
zip -r ../my-deployment-package.zip .
my-deployment-package.zip 파일 아카이브를 사용하여 새 Python 3.9 Lambda 함수를 생성하거나 기존 함수를 업데이트합니다. 지침은 Python Lambda 함수의 .zip 파일 아카이브 사용을 참조하세요.
**참고:**비슷한 절차를 사용하여 여러 함수에서 사용할 수 있는 Lambda 레이어를 생성할 수 있습니다. 예를 들어 다음 명령은 arm64 아키텍처에서 실행되는 Lambda Python 3.9 런타임용 pandas를 설치하기 위한 새 Lambda 레이어를 생성합니다:
pip install \
--platform manylinux2014_aarch64 \
--target=./python/lib/python3.9/site-packages \
--implementation cp \
--python-version 3.9 \
--only-binary=:all: --upgrade \
pandas
관련 정보
람다 레이어 사용