Membangun aplikasi Python

Buildpack mendukung konfigurasi bahasa idiomatis melalui variabel lingkungan.

Menentukan versi Python

Secara default, buildpack Python Runtime menggunakan penafsir Python versi stabil terbaru. Jika aplikasi memerlukan versi tertentu, Anda dapat menentukannya dengan menyertakan file .python-version dalam direktori root aplikasi.

3.13

Gunakan GOOGLE_PYTHON_VERSION

Anda juga dapat menentukan versi Python melalui variabel lingkungan GOOGLE_PYTHON_VERSION. Jika kedua konfigurasi ditetapkan, nilai GOOGLE_PYTHON_VERSION akan lebih diprioritaskan daripada file .python-version. Secara default, jika file .python-version dan variabel lingkungan GOOGLE_PYTHON_VERSION tidak ditentukan, versi LTS terbaru Python akan digunakan.

Untuk mengonfigurasi buildpack agar menggunakan Python 3.13 saat men-deploy aplikasi Anda:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env GOOGLE_PYTHON_VERSION="3.13.x"

Anda juga dapat menggunakan deskriptor project project.toml untuk mengenkode variabel lingkungan bersama file project Anda. Lihat petunjuk cara membangun aplikasi dengan variabel lingkungan.

Menentukan dependensi dengan pip

Buildpack Python mendukung pengelolaan dependensi aplikasi menggunakan pip. Dependensi aplikasi Anda harus dideklarasikan dalam file requirements.txt direktori utama.

File requirements.txt berisi satu baris per paket. Setiap baris berisi nama paket, dan secara opsional, versi yang diminta. Untuk detail selengkapnya, lihat referensi requirements.txt.

Berikut adalah contoh file requirements.txt:

requests==2.20.0
numpy

Mengonfigurasi pip

Perilaku pip dapat dikonfigurasi menggunakan variabel lingkungan:

pack build sample-python --builder=gcr.io/buildpacks/builder \
  --env PIP_DEFAULT_TIMEOUT='60'

Dependensi pribadi dari Artifact Registry

Repositori Python Artifact Registry dapat menghosting dependensi pribadi untuk fungsi Python Anda. Saat membangun aplikasi di Cloud Build, buildpack Python akan otomatis membuat kredensial Artifact Registry untuk akun layanan Cloud Build. Anda hanya perlu menyertakan URL Artifact Registry di requirements.txt tanpa membuat kredensial tambahan. Contoh:

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

Titik entri aplikasi

Bagian berikut menjelaskan titik entri default untuk buildpack Python.

Titik entri untuk deployment sumber Cloud Run

Fitur ini hanya tersedia jika Anda men-deploy kode sumber ke Cloud Run dengan runtime Python. Fitur ini tidak berlaku jika Anda membangun image container secara langsung menggunakan pack build di luar proses deployment sumber Cloud Run.

Buildpack Python mendukung framework web modern seperti FastAPI, Gradio, dan Streamlit.

Python versi 3.12 dan yang lebih lama

Jika Anda menggunakan Python versi 3.12 dan yang lebih lama, buildpack Python secara default menggunakan Gunicorn sebagai server HTTP WSGI untuk workload Anda. Buildpack Python menetapkan titik entri default ke gunicorn -b :8080 main:app.

Python versi 3.13 dan yang lebih baru

Untuk Python versi 3.13 dan yang lebih baru, buildpack Python menetapkan titik entri default untuk deployment sumber Cloud Run berdasarkan konfigurasi framework atau server web di file requirements.txt Anda. Setelan default ini hanya berlaku untuk deployment sumber layanan Cloud Run, bukan untuk Cloud Run functions.

Saat Anda men-deploy layanan Cloud Run dari sumber menggunakan runtime Python, buildpack menentukan versi Python dan titik entri default dengan cara berikut:

  • Jika Anda tidak menentukan versi Python dalam file sumber, buildpack Python akan menyetel default ke versi Python terbaru yang didukung. Buildpack menentukan titik entri default berdasarkan server web atau framework yang telah Anda konfigurasi dalam file requirements.txt.

  • Jika Anda tidak menentukan server web atau framework dalam file requirements.txt, buildpack Python secara default akan menggunakan Gunicorn sebagai server HTTP WSGI untuk workload Anda. Buildpack Python menetapkan titik entri default ke gunicorn -b :8080 main:app.

  • Buildpack Python menetapkan titik entri default berdasarkan urutan prioritas berikut, seperti yang ditentukan dalam file requirements.txt:

    1. gunicorn
    2. uvicorn
    3. gradio
    4. streamlit.

Mengonfigurasi server web atau framework

Untuk setiap konfigurasi Python umum dalam file requirements.txt, tabel berikut menunjukkan titik entri default saat men-deploy ke Cloud Run dari sumber:

Konfigurasi utama Titik entri default Variabel lingkungan
gunicorn gunicorn -b :8080 main:app
numpy gunicorn -b :8080 main:app
fastapi
uvicorn
uvicorn main:app --host 0.0.0.0 --port 8080
uvicorn
gunicorn
gunicorn -b :8080 main:app
gradio python main.py GRADIO_SERVER_NAME=0.0.0.0
GRADIO_SERVER_PORT=8080
streamlit streamlit run main.py --server.address 0.0.0.0 --server.port 8080

Untuk menghindari kegagalan deployment, gunakan versi Python yang didukung dalam file sumber Anda, dan tentukan server web dalam file requirements.txt Anda.

Atau, Anda juga dapat menentukan titik entri dengan menjalankan perintah deployment sumber berikut:

  gcloud run deploy SERVICE --source .  --set-build-env-vars GOOGLE_ENTRYPOINT="ENTRYPOINT"

Ganti kode berikut:

  • SERVICE: nama layanan yang ingin Anda deploy.
  • ENTRYPOINT: titik entri default yang ingin Anda gunakan untuk kode sumber.

Jika Anda tidak dapat men-deploy kode sumber ke Cloud Run atau menemukan error dalam log, lihat panduan pemecahan masalah Cloud Run.

Titik entri untuk semua deployment lainnya

Buildpack Python menggunakan Gunicorn sebagai server HTTP WSGI default untuk workload Anda. Aplikasi yang dibangun dengan buildpack Python memulai proses gunicorn dengan setelan default, mirip dengan menjalankan:

gunicorn --bind :8080 main:app

Menyesuaikan titik entri aplikasi

Anda dapat menyesuaikan perintah memulai aplikasi menggunakan Procfile atau variabel lingkungan. Anda mungkin perlu melakukannya untuk menyesuaikan konfigurasi titik entri default.

Anda dapat membuat Procfile dengan setelan kustom di direktori root. Contoh:

web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app

Atau, Anda dapat menggunakan variabel lingkungan GOOGLE_ENTRYPOINT dengan perintah pack. Contoh:

pack build sample-python \
  --builder gcr.io/buildpacks/builder
  --env "GOOGLE_ENTRYPOINT='gunicorn --bind :$PORT main:app'"

Variabel Lingkungan

Buildpack Python mendukung variabel lingkungan berikut untuk menyesuaikan container Anda

PIP_<key>

Lihat dokumentasi pip.

Contoh: PIP_DEFAULT_TIMEOUT=60 menetapkan --default-timeout=60 untuk perintah pip.