Menetapkan dependensi di Python

Tentukan dependensi aplikasi Anda untuk versi Python yang didukung menggunakan salah satu pendekatan berikut:

  • Gunakan file requirements.txt di direktori root. File ini harus berada di direktori yang sama dengan file main.py yang berisi kode sumber Anda. File requirements.txt berisi satu baris per paket. Setiap baris berisi nama paket, dan secara opsional, versi yang diminta. Agar build Anda tidak terpengaruh oleh perubahan versi dependensi, pertimbangkan untuk menyematkan paket dependensi ke versi tertentu.

    Berikut adalah contoh file requirements.txt:

    functions-framework
    requests==2.20.0
    numpy
    
  • Gunakan file pyproject.toml untuk menentukan dependensi. Jika Anda mengelola dependensi aplikasi dalam file pyproject.toml, bukan file requirements.txt, buildpack Python akan menentukan pengelola paket berdasarkan konfigurasi yang Anda tentukan dalam file pyproject.toml. Untuk mengetahui informasi selengkapnya, lihat Men-deploy aplikasi Python dengan file pyproject.toml.

    Jika aplikasi Anda menggunakan file pyproject.toml dan file requirements.txt, file requirements.txt akan diprioritaskan.

    • Berikut adalah contoh file pyproject.toml:

      [project]
      name = "demo-app"
      version = "0.1.0"
      description = ""
      requires-python = ">=3.10"
      dependencies = [
          "flask>=3.1.1",
          "gunicorn>=23.0.0",
      ]
      
      [build-system]
      requires = ["setuptools>=61.0"]
      build-backend = "setuptools.build_meta"
      
  • Paketkan dependensi lokal bersama fungsi Anda.

    Spesifikasi dependensi yang menggunakan standar Pipfile/Pipfile.lock tidak didukung. Project Anda tidak boleh menyertakan file ini.

    Jika Anda menggunakan file requirements.txt untuk mengelola dependensi, Cloud Run akan menginstal Functions Framework atas nama Anda saat Anda membuat fungsi. Namun, sebaiknya Anda menyertakan Functions Framework sebagai dependensi eksplisit untuk menghindari perbedaan.

    Saat menggunakan file pyproject.toml, Anda harus menyertakan Functions Framework sebagai dependensi karena Cloud Run tidak menginstalnya untuk Anda.

Pengelola paket

Jika Anda mengelola dependensi menggunakan requirements.txt file, pengelola paket default akan bervariasi berdasarkan versi Python yang Anda konfigurasi.

Jika Anda menggunakan file pyproject.toml untuk mengelola dependensi, bukan file requirements.txt, buildpack Python akan menentukan pengelola paket berdasarkan setelan konfigurasi Anda dalam file pyproject.toml. Buildpack mendukung pengelola paket pip, uv, dan Poetry. Untuk mengetahui informasi selengkapnya, lihat Men-deploy aplikasi Python dengan file pyproject.toml.

Python 3.14 dan yang lebih baru

Mulai dari Python versi 3.14 (pratinjau) dan yang lebih baru, buildpack Python menggunakan pengelola paket uv sebagai penginstal default untuk dependensi yang Anda tentukan dalam file requirements.txt.

Untuk menggunakan pip sebagai pengelola paket, konfigurasi variabel lingkungan GOOGLE_PYTHON_PACKAGE_MANAGER="pip".

Jalankan perintah gcloud run deploy untuk menetapkan variabel lingkungan pengelola paket ke pip:

gcloud run deploy SERVICE --source . \
  --set-build-env-vars=GOOGLE_PYTHON_PACKAGE_MANAGER=pip

Ganti SERVICE dengan nama layanan Cloud Run Anda.

Python 3.13 dan yang lebih lama

Untuk Python versi 3.13 dan yang lebih lama, buildpack Python menggunakan pengelola paket pip untuk menginstal dependensi yang Anda tentukan dalam file requirements.txt.

Untuk menggunakan uv (pratinjau) sebagai pengelola paket, konfigurasi variabel lingkungan GOOGLE_PYTHON_PACKAGE_MANAGER="uv".

Jalankan perintah gcloud beta run deploy untuk menetapkan variabel lingkungan pengelola paket ke uv:

gcloud beta run deploy SERVICE --source . \
  --set-build-env-vars=GOOGLE_PYTHON_PACKAGE_MANAGER=uv

Ganti SERVICE dengan nama layanan Cloud Run Anda.

Mengemas dependensi lokal

Kemas dan deploy dependensi bersama fungsi Anda. Pendekatan ini berguna jika dependensi Anda tidak tersedia saat Anda menggunakan pengelola paket yang didukung atau jika akses internet lingkungan Cloud Run Anda dibatasi.

Anda juga dapat menggunakan file requirements.txt untuk menentukan dependensi tambahan yang belum dikemas bersama fungsi Anda. Misalnya, Anda dapat menggunakan struktur direktori berikut:

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

Impor kode dari localpackage menggunakan pernyataan import berikut:

# code in main.py
from localpackage import script

Pendekatan ini tidak akan menjalankan file setup.py apa pun. Anda dapat memaketkan paket dengan file tersebut, tetapi paket mungkin tidak berjalan dengan benar di Cloud Run functions.

Dependensi yang disalin

Dependensi yang disalin adalah dependensi yang sumbernya disertakan langsung dalam paket kode sumber Anda dan di-build ulang bersama kode Anda sendiri. Gunakan variabel lingkungan build GOOGLE_VENDOR_PIP_DEPENDENCIES untuk membuat dependensi pip yang disalin dan menghindari penginstalannya selama deployment.

Membuat dependensi yang disalin

  1. Pastikan python3 diinstal di sistem pengembangan Anda.

  2. Deklarasikan dependensi aplikasi Anda dalam file requirements.txt di direktori root hierarki pengembangan Anda.

  3. Nyatakan Functions Framework sebagai persyaratan dengan menyertakan functions-framework pada baris terpisah dalam file requirements.txt Anda.

  4. Download dependensi fungsi Anda ke direktori lokal Anda. Langkah-langkah untuk melakukannya bergantung pada apakah dependensi adalah file wheel Python (*.whl) atau file tar (*.tar.gz).

    1. Jika dependensinya adalah wheel Python (*.whl), download 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_VERSION \
         --platform manylinux2014_x86_64 \
         --implementation cp
      

      Ganti kode berikut:

      • DIRECTORY: nama direktori lokal yang akan digunakan untuk mendownload.
      • PYTHON_RUNTIME_VERSION: versi Python yang akan digunakan untuk pemeriksaan kompatibilitas. Misalnya, 314 untuk Python 3.14.
        Versi ini harus cocok dengan salah satu runtime Python yang didukung.

      Struktur direktori yang dihasilkan akan terlihat seperti ini:

      myfunction/
      ├── main.py
      └── requirements.txt
      └── DIRECTORY
         ├── dependency1.whl
         └── dependency2.whl
      

    2. Jika dependensi adalah file tar (*.tar.gz):

      1. Jika dependensi ditulis dalam Python, gunakan pip untuk mendownloadnya:

        python3 -m pip download -r requirements.txt \
           -d DIRECTORY
        
      2. Jika dependensi terdiri dari kode yang ditulis dalam C atau C++, download dan kompilasi kode secara terpisah.

  5. Deploy fungsi dan dependensi yang disalin:

    gcloud functions deploy FUNCTION_NAME \
      --runtime PYTHON_RUNTIME_NAME \
      --set-build-env-vars GOOGLE_VENDOR_PIP_DEPENDENCIES=DIRECTORY
    

    Ganti kode berikut:

    • FUNCTION_NAME: nama fungsi yang Anda deploy.
    • PYTHON_RUNTIME_NAME: nama salah satu runtime Python yang didukung untuk menjalankan fungsi yang di-deploy - misalnya python311. Versi ini harus sama dengan versi runtime Python yang Anda gunakan di lingkungan pengembangan lokal.
    • DIRECTORY: nama direktori yang berisi dependensi yang disalin.

Untuk mengetahui detail selengkapnya tentang penggunaan buildpack, lihat Membangun fungsi dengan buildpack.

Menggunakan dependensi pribadi

Anda dapat menggunakan dependensi pribadi dari Artifact Registry atau dari repositori lain.

Dependensi pribadi dari Artifact Registry

Repositori Python Artifact Registry menghosting dependensi pribadi untuk fungsi Python Anda. Saat melakukan deployment ke Cloud Run, proses build akan otomatis menghasilkan kredensial Artifact Registry untuk akun layanan Cloud Build. Sertakan 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 penelusuran repositori oleh pip.

Dependensi pribadi dari repositori lain

Buildpack menginstal dependensi di lingkungan Cloud Build yang tidak memberikan akses ke kunci SSH. Salin paket yang Anda hosting di repositori yang memerlukan autentikasi berbasis SSH dan upload paket dengan kode project Anda.

Gunakan perintah pip install dengan flag -t DIRECTORY untuk menyalin dependensi pribadi ke direktori lokal sebelum men-deploy aplikasi, seperti berikut:

  1. Salin dependensi Anda ke direktori lokal:
    pip install -t DIRECTORY DEPENDENCY
  2. Tambahkan file __init__.py kosong ke direktori DIRECTORY untuk mengubahnya menjadi modul.
  3. Impor dari modul ini untuk menggunakan dependensi Anda:
    import DIRECTORY.DEPENDENCY

Paket yang telah terpasang sebelumnya

Buildpack Python menginstal paket Python berikut saat Anda men-deploy fungsi. Jika Anda menggunakan salah satu paket ini dalam kode fungsi, sertakan versi berikut dalam file requirements.txt:

Untuk menghindari masalah pada update versi dependensi, sematkan paket ke versi tertentu.

anyio==4.5.2
blinker==1.8.2
click==8.1.8
cloudevents==1.11.0
deprecation==2.1.0
exceptiongroup==1.3.0
Flask==3.0.3
functions-framework==3.9.1
gunicorn==23.0.0
h11==0.16.0
idna==3.10
importlib_metadata==8.5.0
itsdangerous==2.2.0
Jinja2==3.1.6
MarkupSafe==2.1.5
packaging==25.0
sniffio==1.3.1
# Install starlette 0.44.0 for Python 3.8
starlette==0.44.0; python_version == '3.8'
# Install starlette 0.49.1 for Python versions greater than 3.8
starlette==0.49.1; python_version > '3.8'
typing_extensions==4.13.2
uvicorn==0.33.0
uvicorn-worker==0.2.0
watchdog==4.0.2
Werkzeug==3.0.6
zipp==3.20.2

Buildpack Python menginstal paket berikut yang disematkan ke versi tertentu:

  • pip (versi terbaru)
  • setuptools (versi terbaru)
  • wheel (ditentukan oleh persyaratan produk)

Runtime Python juga menyertakan sejumlah paket sistem di lingkungan eksekusi.