Python의 종속 항목 지정

Python으로 작성된 Cloud Functions를 위한 종속 항목을 지정하는 방법은 두 가지로, pip 패키지 관리자의 requirements.txt 파일을 사용하는 방법 또는 로컬 종속 항목을 함수와 함께 패키징하는 방법이 있습니다.

Pipfile/Pipfile.lock 표준을 사용하는 종속 항목 사양은 지원되지 않습니다. 프로젝트에 이러한 파일이 존재해선 안 됩니다.

pip를 사용하여 종속 항목 지정

Python의 종속 항목은 pip로 관리되며 requirements.txt라는 메타데이터 파일로 표현됩니다. 이 파일은 함수 코드가 포함된 main.py 파일과 동일한 디렉터리에 있어야 합니다.

함수를 배포하면 Cloud Functions가 pip를 사용하여 requirements.txt 파일에 선언된 종속 항목을 다운로드하고 설치합니다.

requirements.txt 파일에는 패키지당 한 줄이 포함됩니다. 각 줄에는 패키지 이름과 선택사항으로 요청된 버전이 포함됩니다. 자세한 내용은 requirements.txt 참조를 참조하세요.

다음은 requirements.txt 파일의 예시입니다.

requests==2.20.0
numpy

로컬 종속 항목 패키징

함수와 함께 종속 항목을 패키징하고 배포할 수도 있습니다. 이 방법은 pip 패키지 관리자를 통해 종속 항목을 사용할 수 없거나 Cloud Functions 환경의 인터넷 액세스가 제한된 경우에 유용합니다.

예를 들어 다음과 같은 디렉터리 구조를 사용할 수 있습니다.

myfunction/
├── main.py
└── localpackage/
    ├── __init__.py
    └── script.py

그런 다음 import 문을 사용하여 localpackage에서 평소처럼 코드를 가져올 수 있습니다.

# Code in main.py
from localpackage import script

이 방법은 setup.py 파일을 실행하지 않습니다. 이러한 파일이 포함된 패키지는 계속 번들로 제공될 수 있지만 Cloud Functions에서 올바르게 실행되지 않을 수 있습니다.

비공개 종속 항목 사용

Artifact Registry의 비공개 종속 항목

Artifact Registry Python 저장소는 Python 함수의 비공개 종속 항목을 호스팅할 수 있습니다. Cloud Functions에 배포할 때 빌드 프로세스는 Cloud Build 서비스 계정의 Artifact Registry 사용자 인증 정보를 자동으로 생성합니다. 추가 사용자 인증 정보를 생성하지 않고도 requirements.txt에 Artifact Registry URL만 포함하면 됩니다. 예를 들면 다음과 같습니다.

--extra-index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage

다른 저장소의 비공개 종속 항목

종속 항목은 SSH 키 액세스를 제공하지 않는 Cloud Build 환경에 설치됩니다. SSH 기반 인증이 필요한 저장소에 호스팅되는 패키지는 이전 섹션에 설명된 대로 프로젝트 코드와 함께 벤더링 및 업로드되어야 합니다.

pip install 명령어를 -t DIRECTORY 플래그와 함께 사용하면 앱을 배포하기 전에 다음과 같이 비공개 종속 항목을 로컬 디렉터리에 복사할 수 있습니다.

  1. 종속 항목을 로컬 디렉터리에 복사합니다.

    pip install -t DIRECTORY DEPENDENCY
  2. __init__.py 파일을 DIRECTORY 디렉터리에 추가하여 모듈로 변환합니다.

  3. 이 모듈에서 가져와서 종속 항목을 사용합니다.

    import DIRECTORY.DEPENDENCY

사전 설치 패키지

다음 Python 패키지는 배포 중 함수와 함께 자동으로 설치됩니다. 함수 코드에서 이러한 패키지를 사용하는 경우 requirements.txt 파일에 다음 버전을 포함하는 것이 좋습니다.

Python 3.7

aiohttp==3.8.1
aiosignal==1.2.0
async-timeout==4.0.2
attrs==21.4.0
cachetools==4.2.4
certifi==2021.10.8
chardet==4.0.0
charset-normalizer==2.0.10
click==8.0.3
Flask==2.0.2
frozenlist==1.2.0
google-api-core==2.3.2
google-api-python-client==2.34.0
google-auth==2.3.3
google-auth-httplib2==0.1.0
google-cloud-core==2.2.1
google-cloud-trace==1.5.1
googleapis-common-protos==1.54.0
grpcio==1.43.0
grpcio-status==1.43.0
httplib2==0.20.2
idna==3.3
itsdangerous==2.0.1
Jinja2==3.0.3
MarkupSafe==2.0.1
multidict==5.2.0
opencensus==0.8.0
opencensus-context==0.1.2
packaging==21.3
proto-plus==1.19.8
protobuf==3.19.1
pyasn1==0.4.8
pyasn1-modules==0.2.8
pyparsing==3.0.6
pytz==2021.3
PyYAML==6.0
requests==2.27.1
rsa==4.8
setuptools==60.3.1
six==1.16.0
uritemplate==4.1.1
urllib3==1.26.7
Werkzeug==2.0.2
wrapt==1.13.3
yarl==1.7.2

Python 3.8 이상

click==8.1.7
cloudevents==1.9.0
deprecation==2.1.0
Flask==2.2.5
functions-framework==3.0.0
gunicorn==20.1.0
importlib-metadata==6.7.0
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
packaging==23.1
typing_extensions==4.7.1
watchdog==1.0.2
Werkzeug==2.2.3
zipp==3.15.0

* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)

또한 Python 런타임에는 실행 환경에 여러 시스템 패키지가 포함되어 있습니다. 함수가 목록에 없는 시스템 패키지를 필요로 하는 종속 항목을 사용하면 패키지를 요청할 수 있습니다.