Python merilis versi besar setiap tahun, sehingga fitur bahasa baru masuk melalui antrean yang bergerak teratur. Topik ini memetakan perubahan penting dari Python 3.12 sampai 3.15, menyebutkan PEP yang menjadi dasar setiap perubahan, dan menunjukkan teknik menulis kode yang tetap berjalan di beberapa versi sekaligus. Setelah membacanya, keputusan menaikkan versi dapat dibuat berdasarkan fitur yang benar-benar dibutuhkan proyek, bukan sekadar nomor versinya.
Garis waktu rilis tahunan#
Python mengeluarkan satu versi besar setiap bulan Oktober sesuai PEP 602, keputusan resmi yang menetapkan siklus rilis tahunan. Nomor versinya bertambah satu setiap tahun, sedangkan dukungan keamanan untuk setiap versi berlanjut sekitar lima tahun sejak tanggal rilisnya. Perubahan bahasa dan pustaka standar diterima lebih dahulu melalui dokumen PEP (Python Enhancement Proposal), yaitu usulan resmi perubahan Python yang dipublikasikan beserta alasannya, sehingga setiap fitur dapat ditelusuri sampai ke keputusannya. Diagram berikut menempatkan empat versi pada garis waktunya.
Empat versi pada diagram memuat campuran tiga jenis perubahan, yaitu fitur bahasa baru, penambahan pustaka standar, dan penghapusan modul lama. Ketiganya menuntut perhatian yang berbeda. Fitur baru hanya relevan ketika proyek membutuhkannya, sedangkan penghapusan dapat merusak program yang sudah berjalan begitu versi dinaikkan, sehingga daftar modul yang dihapus perlu dibaca lebih dahulu sebelum pembaruan dijalankan.
Python 3.12 dan 3.13#
Python 3.12, yang dirilis pada Oktober 2023, menambahkan sintaks parameter tipe melalui PEP 695. Fungsi generik kini ditulis sebagai def ambil_pertama[T](data: list[T]) -> T tanpa harus mengimpor TypeVar dari modul typing. F-string juga menjadi lebih fleksibel melalui PEP 701, karena tanda kutip yang sama dapat disarangkan di dalamnya dan ekspresinya boleh berlanjut ke beberapa baris. Pada sisi pembersihan, modul distutils dihapus karena tugasnya telah diambil alih setuptools.
Python 3.13, yang dirilis pada Oktober 2024, membawa dua eksperimen besar, yaitu build free-threaded (PEP 703) dan JIT (just-in-time, PEP 744). Build free-threaded adalah varian Python yang berjalan tanpa Global Interpreter Lock (GIL) dan tersedia sebagai build terpisah, bukan pilihan bawaan, sehingga perangkat lunak yang bergantung pada C extension perlu diuji terlebih dahulu pada varian ini. Versi yang sama menggantikan REPL interaktif dengan yang baru, lengkap dengan warna dan pengeditan multi-baris. Penghapusan juga berlangsung besar-besaran, yaitu modul-modul yang dijuluki baterai mati (dead batteries) oleh PEP 594, seperti cgi dan telnetlib, beserta alat konversi 2to3.
Atribut sys.version_info menjadi titik tolak untuk membaca keadaan versi.
import sys
print(sys.version_info[:3])(3, 12, 16)Nilai di atas berasal dari Python 3.12 yang dipakai untuk menjalankan contoh pada topik ini. Atribut sys.version_info berupa tuple bernama yang dapat dibandingkan langsung dengan tuple versi, misalnya sys.version_info >= (3, 13). Pembandingan itu berjalan berurutan pada pasangan versi mayor, versi minor, kemudian nomor pemeliharaan, sehingga pemeriksaan versi tidak perlu mengurai keluaran sys.version.
Python 3.14 dan 3.15#
Python 3.14, yang dirilis pada Oktober 2025, memindahkan build free-threaded dari status eksperimental ke status didukung resmi melalui PEP 779. Evaluasi anotasi menjadi malas (deferred) melalui PEP 649, sehingga anotasi tidak lagi dieksekusi ketika definisi dibaca, dan modul annotationlib menyediakan cara membacanya secara terprogram. Template string atau t-string (PEP 750) menambahkan awalan t di samping f untuk string templat yang hasilnya dapat diproses sebelum dirender. Beberapa tipe exception juga dapat ditangkap tanpa tanda kurung (PEP 758), interpreter antarproses masuk ke pustaka standar melalui concurrent.interpreters (PEP 734), dan modul compression.zstd ditambahkan (PEP 784).
Python 3.15 menutup peta ini sebagai versi yang daftar perubahannya masih diperbarui pada halaman What’s New resminya. Salah satu perubahan yang telah diterima adalah PEP 686, yang menjadikan mode UTF-8 sebagai pilihan bawaan sehingga berkas teks dibaca sebagai UTF-8 tanpa konfigurasi tambahan. Pekerjaan pada free-threading juga berlanjut secara bertahap pada versi ini. Untuk seluruh daftarnya, halaman What’s New in Python 3.15 pada docs.python.org merupakan sumber yang mengikuti perkembangan rilis.
Menulis kode lintas versi#
Kode yang harus berjalan di beberapa versi Python mengandalkan dua teknik dasar. Teknik pertama adalah gerbang versi, yaitu membandingkan sys.version_info dengan tuple versi sebelum memanggil fitur tertentu. Teknik kedua adalah deteksi fitur, yaitu mencoba mengakses fitur tersebut dan menyiapkan jalur pengganti apabila gagal. Deteksi fitur umumnya lebih awet karena menguji hal yang benar-benar digunakan program, bukan angka versinya.
import sys
if sys.version_info >= (3, 13):
print("fitur 3.13 dipakai")
else:
print("jalur pengganti untuk versi yang lebih lama")jalur pengganti untuk versi yang lebih lamaPada Python 3.12 yang dipakai di sini, kondisi perbandingan bernilai False sehingga jalur penggantinya yang dijalankan. Pola gerbang versi tepat untuk fitur yang kemunculannya jelas pada satu versi, misalnya modul atau fungsi yang baru ditambahkan. Batasannya terasa pada proyek yang mendukung banyak versi, karena daftar pemeriksaannya ikut bertambah setiap tahun.
try:
from itertools import batched
except ImportError:
batched = None
if batched is None:
print("batched tidak tersedia, gunakan pola manual")
else:
print(list(batched([1, 2, 3, 4, 5], 2)))[(1, 2), (3, 4), (5,)]Fungsi itertools.batched baru ada sejak Python 3.12, sehingga pada versi yang lebih lama blok except menangkap ImportError dan variabel batched bernilai None. Program kemudian memilih implementasi penggantinya tanpa membaca nomor versi sama sekali. Pola try dan except ini sama dengan yang digunakan banyak pustaka untuk mendukung rentang versi yang lebar.
Kesalahan umum#
Kesalahan pertama adalah membandingkan sys.version_info dengan string, misalnya sys.version_info >= "3.13". Perbandingan semacam itu menimbulkan error TypeError saat program berjalan, karena tuple versi hanya dapat dibandingkan dengan tuple versi lain.
import sys
try:
sys.version_info >= "3.13"
except TypeError as e:
print(type(e).__name__, str(e))TypeError '>=' not supported between instances of 'sys.version_info' and 'str'Bentuk yang benar adalah (3, 13) tanpa tanda kutip, sebagaimana dipakai pada contoh gerbang versi. Perbaikan lainnya tidak membutuhkan perubahan alur program, cukup mengganti bentuk pembandingnya.
Kesalahan kedua adalah memperlakukan fitur eksperimental sebagai fitur siap produksi. Build free-threaded pada 3.13 dan JIT masing-masing masih eksperimental saat diperkenalkan, sehingga perilakunya dapat berubah antarversi dan dukungan pihak ketiga belum penuh. Pemilihan fitur semacam ini sebaiknya mengikuti status resminya pada halaman What’s New, bukan kehadirannya saja.
Kesalahan ketiga adalah menaikkan versi tanpa membaca daftar modul yang dihapus. Program yang masih mengimpor cgi atau modul lama lainnya akan gagal pada tahap import ketika dijalankan di Python 3.13, meskipun sisa kodenya tidak berubah. Pemeriksaan cepat atas daftar PEP 594 dan bagian Removed pada halaman What’s New menghindarkan error semacam ini.
Ringkasan#
- Python merilis versi besar setiap Oktober sesuai PEP 602, dan setiap perubahan bahasa disetujui terlebih dahulu melalui PEP.
- Python 3.12 menambah sintaks parameter tipe (PEP 695) dan f-string fleksibel (PEP 701), sedangkan 3.13 menghadirkan build free-threaded dan JIT eksperimental serta menghapus modul-modul lama (PEP 594).
- Python 3.14 menetapkan build free-threaded sebagai didukung resmi, menjadikan anotasi malas (PEP 649), dan menambah t-string (PEP 750), sedangkan 3.15 melanjutkan perubahannya melalui PEP yang diterima seperti PEP 686.
- Kode lintas versi ditulis dengan gerbang
sys.version_infodan deteksi fitur berbasis try dan except ImportError.
Referensi#
- What’s New in Python 3.12 — Python Software Foundation — Daftar resmi perubahan pada Python 3.12.
- What’s New in Python 3.13 — Python Software Foundation — Daftar resmi perubahan pada Python 3.13, termasuk penghapusan PEP 594.
- What’s New in Python 3.14 — Python Software Foundation — Daftar resmi perubahan pada Python 3.14.
- What’s New in Python 3.15 — Python Software Foundation — Daftar perubahan Python 3.15 yang diperbarui sepanjang masa pengembangannya.
- PEP 602 – Annual Release Cycle for Python — Python Software Foundation — Dasar siklus rilis tahunan Python.