Menetapkan dependensi di Python
Ada dua cara untuk menentukan dependensi untuk Cloud Functions yang ditulis dalam Python: menggunakan file requirements.txt
pengelola paket pip atau memaketkan dependensi lokal dengan fungsi Anda.
Spesifikasi dependensi yang menggunakan standar Pipfile/Pipfile.lock tidak didukung. Project Anda tidak boleh menyertakan file ini.
Menentukan dependensi dengan pip
Dependensi pada Python dikelola dengan pip dan dinyatakan dalam file metadata
yang disebut
requirements.txt
.
File ini harus berada di direktori yang sama dengan file main.py
yang berisi
kode fungsi Anda.
Saat Anda men-deploy atau men-deploy ulang fungsi, Cloud Functions menggunakan pip untuk mendownload dan menginstal versi terbaru dependensi Anda, seperti yang dideklarasikan dalam file requirements.txt
.
File requirements.txt
berisi satu baris per paket. Setiap baris berisi
nama paket, dan secara opsional, versi yang diminta. Untuk detail selengkapnya, lihat requirements.txt
referensi.
Agar build Anda tidak terpengaruh oleh perubahan versi dependensi, pertimbangkan untuk memasang pin pada paket dependensi ke versi tertentu.
Berikut adalah contoh file requirements.txt
:
functions-framework requests==2.20.0 numpy
Functions Framework adalah dependensi wajib untuk semua fungsi. Meskipun Cloud Functions menginstalnya untuk Anda saat fungsi tersebut dibuat, sebaiknya sertakan sebagai dependensi eksplisit agar lebih jelas.
Jika fungsi
Anda bergantung pada dependensi pribadi, sebaiknya
cerminkan functions-framework
ke registry pribadi Anda. Sertakan functions-framework
yang diduplikasi sebagai dependensi ke fungsi Anda untuk menghindari penginstalan
paket dari internet publik.
Mengemas dependensi lokal
Anda juga dapat mengemas dan men-deploy dependensi bersama fungsi Anda. Pendekatan ini berguna jika dependensi Anda tidak tersedia melalui pengelola paket pip atau jika akses internet lingkungan Cloud Functions Anda dibatasi.
Misalnya, Anda dapat menggunakan struktur direktori seperti berikut:
myfunction/ ├── main.py └── localpackage/ ├── __init__.py └── script.py
Kemudian, Anda dapat mengimpor kode seperti biasa dari localpackage
menggunakan pernyataan
import
berikut.
# Code in main.py from localpackage import script
Perhatikan bahwa pendekatan ini tidak akan menjalankan file setup.py
apa pun. Paket yang berisi file tersebut masih dapat dipaketkan, tetapi mungkin tidak berjalan dengan benar di Cloud Functions.
Dependensi vendor
Dependensi vendor adalah dependensi yang sumbernya disertakan langsung dalam paket kode sumber Anda dan dibuat ulang bersama kode Anda sendiri. Gunakan variabel lingkungan build GOOGLE_VENDOR_PIP_DEPENDENCIES untuk membuat dependensi pip vendor dan menghindari penginstalannya selama deployment.
Membuat dependensi vendor
Pastikan python3 diinstal di sistem pengembangan Anda.
Deklarasikan dependensi aplikasi Anda dalam file
requirements.txt
di direktori utama struktur pengembangan Anda.Deklarasikan Framework Functions sebagai persyaratan dengan menyertakan
functions-framework
pada baris terpisah dalam filerequirements.txt
.Download dependensi fungsi Anda ke direktori lokal. Langkah-langkah untuk melakukannya bergantung pada apakah dependensinya adalah file roda Python (*.whl) atau file tar (*.tar.gz).
Jika dependensinya adalah roda Python (*.whl), download dependensi tersebut ke direktori root hierarki pengembangan Anda dengan perintah pip ini:
python3 -m pip download -r requirements.txt --only-binary=:all: \ -d DIRECTORY \ --python-version PYTHON_RUNTIME_NAME \ --platform manylinux2014_x86_64 \ --implementation cp
Ganti:
- DIRECTORY: nama direktori lokal yang akan didownload
- PYTHON_RUNTIME_NAME: versi Python yang akan digunakan untuk pemeriksaan kompatibilitas
Struktur direktori yang dihasilkan akan terlihat seperti ini:
myfunction/ ├── main.py └── requirements.txt └── DIRECTORY ├── dependency1.whl └── dependency2.whl
Jika dependensinya adalah file tar (*.tar.gz):
Jika dependensi ditulis dalam Python, gunakan pip untuk mendownloadnya:
python3 -m pip download -r requirements.txt \ -d DIRECTORY
Jika dependensi terdiri dari kode yang ditulis dalam C atau C++, Anda harus mendownload dan mengompilasinya secara terpisah.
Deploy fungsi Anda dan dependensi vendornya:
gcloud functions deploy FUNCTION_NAME \ --runtime PYTHON_RUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
Ganti:
- FUNCTION_NAME: nama fungsi Cloud Functions yang Anda deploy
- PYTHON_RUNTIME_NAME: nama runtime Python untuk menjalankan fungsi yang di-deploy pada - misalnya python311. Versi ini harus merupakan versi runtime Python yang sama dengan yang Anda gunakan di lingkungan pengembangan lokal.
- DIRECTORY:nama direktori yang berisi dependensi vendor Anda
Untuk mengetahui detail selengkapnya tentang penggunaan buildpack, lihat Mem-build fungsi dengan buildpack.
Menggunakan dependensi pribadi
Dependensi pribadi dari Artifact Registry
Repositori Python Artifact Registry dapat menghosting dependensi pribadi untuk fungsi Python Anda. Saat melakukan deployment ke Cloud Functions, proses build akan otomatis menghasilkan kredensial Artifact Registry untuk akun layanan Cloud Build. Anda hanya perlu menyertakan URL Artifact Registry di requirements.txt
tanpa membuat kredensial tambahan. Contoh:
--index-url REPOSITORY_URL
sampleapp
Flask==0.10.1
google-cloud-storage
Jika build Anda memerlukan beberapa repositori, gunakan repositori virtual Artifact Registry untuk mengontrol dengan aman urutan pip menelusuri repositori Anda.
Dependensi pribadi dari repositori lain
Dependensi diinstal di lingkungan Cloud Build yang tidak memberikan akses ke kunci SSH. Paket yang dihosting di repositori yang memerlukan autentikasi berbasis SSH harus di-vendor dan diupload bersama kode project Anda, seperti yang dijelaskan di bagian sebelumnya.
Anda dapat menggunakan perintah pip install
dengan flag -t DIRECTORY
untuk menyalin dependensi pribadi ke direktori lokal sebelum men-deploy aplikasi, seperti berikut:
Salin dependensi Anda ke direktori lokal:
pip install -t DIRECTORY DEPENDENCY
Tambahkan file
__init__.py
kosong ke direktoriDIRECTORY
untuk mengubahnya menjadi modul.Impor dari modul ini untuk menggunakan dependensi Anda:
import DIRECTORY.DEPENDENCY
Paket yang telah terpasang sebelumnya
Paket Python berikut akan otomatis diinstal bersama fungsi Anda selama deployment. Jika Anda menggunakan salah satu paket ini dalam kode fungsi, sebaiknya sertakan versi berikut dalam file requirements.txt
:
Python 3.7
Python 3.8 dan yang lebih baru
* `pip` (latest version)
* `setuptools` (latest version)
* `wheel` (determined by product requirements)
Selain itu, runtime Python menyertakan sejumlah paket sistem di lingkungan eksekusi. Jika fungsi Anda menggunakan dependensi yang memerlukan paket sistem yang tidak tercantum, Anda dapat meminta paket.