Python PEP 810 Mencadangkan Lazy Imports untuk Mempercepatkan Masa Permulaan CLI

Pasukan Komuniti BigGo
Python PEP 810 Mencadangkan Lazy Imports untuk Mempercepatkan Masa Permulaan CLI

Pembangun Python telah lama bergelut dengan masa permulaan yang perlahan untuk alat baris arahan, sering menunggu beberapa saat hanya untuk melihat mesej bantuan. Cadangan baharu, PEP 810 , bertujuan menyelesaikan masalah ini dengan memperkenalkan lazy imports - ciri yang menangguhkan pemuatan modul sehingga ia benar-benar diperlukan.

Cadangan ini memperkenalkan kata kunci lazy yang mudah yang boleh ditambah sebelum penyataan import. Daripada memuatkan semua modul semasa permulaan, Python hanya akan memuatkannya apabila kod benar-benar menggunakannya. Ini boleh mempercepatkan alat CLI secara dramatik yang mengimport perpustakaan berat seperti PyTorch atau NumPy tetapi hanya menggunakannya dalam laluan kod tertentu.

Contoh Sintaks yang Dicadangkan:

  • Import asas: lazy import torch
  • Import dari: lazy from numpy import array
  • Import dengan alias: lazy import pandas as pd
  • Kawalan global: __lazy_modules__ = ['torch', 'pandas']

Komuniti Menerima Penyelesaian Ini

Komuniti Python telah merespons dengan penuh semangat terhadap cadangan ini. Ramai pembangun telah berkongsi kekecewaan mereka dengan penyelesaian sementara semasa, seperti memindahkan import ke dalam fungsi atau menggunakan mekanisme lazy loading yang kompleks. Seorang pembangun menyatakan bagaimana alat CLI berasaskan plugin mereka mengalami masa permulaan yang perlahan kerana plugin popular mengimport perpustakaan berat di peringkat modul, menghalang walaupun arahan mudah seperti mesej bantuan.

Cadangan ini telah belajar daripada percubaan sebelumnya. Versi terdahulu, PEP 690 , telah ditolak pada tahun 2022 kerana kebimbangan kerumitan mengenai mempunyai dua mod import yang berbeza. Pendekatan baharu ini menangani isu-isu tersebut dengan menjadikan lazy imports secara eksplisit opt-in dan menyediakan mekanisme kawalan yang jelas.

Percubaan Sebelumnya:

  • PEP 690 (2022): Ditolak kerana kerumitan mod import dwi
  • Cinder Meta : Melaksanakan lazy imports dalam fork Python produksi
  • Pelbagai penyelesaian pihak ketiga: LazyLoader , hook importlib , pelaksanaan tersuai

Sintaks Mengekalkan Kesederhanaan

Sintaks yang dicadangkan dibina berdasarkan corak Python yang biasa. Pembangun akan menulis lazy import torch dan bukannya import torch , atau lazy from numpy import array untuk import tertentu. Ciri ini juga termasuk mekanisme kawalan global, membenarkan keseluruhan aplikasi melumpuhkan lazy loading apabila diperlukan - berguna untuk persekitaran ujian atau pengeluaran di mana tingkah laku permulaan yang boleh diramal lebih penting daripada kelajuan.

Sesetengah ahli komuniti telah mencadangkan pendekatan alternatif, seperti menjadikan semua import lazy secara lalai atau menggunakan sintaks gaya decorator. Walau bagaimanapun, cadangan semasa mengutamakan keserasian ke belakang dan kawalan eksplisit berbanding perubahan yang lebih radikal.

Ciri-ciri Utama:

  • Pemuatan malas secara pilihan dengan kata kunci lazy yang eksplisit
  • Kawalan membolehkan/melumpuhkan global untuk keseluruhan aplikasi
  • Keserasian ke belakang dengan kod Python sedia ada
  • Sokongan untuk kedua-dua modul dan import gaya from
  • Pengesahan masa jalan untuk import malas

Pertukaran Prestasi vs Kebolehpercayaan

Ciri lazy import mewujudkan ketegangan menarik antara prestasi dan kebolehpercayaan. Walaupun masa permulaan yang lebih pantas menarik minat ramai pembangun, sesetengah pasukan lebih suka tingkah laku semasa di mana kegagalan import berlaku serta-merta semasa permulaan dan bukannya berpotensi berjam-jam kemudian apabila laluan kod tertentu dilaksanakan.

Kami cenderung untuk memilih import peringkat atas yang eksplisit khususnya kerana ia mendedahkan masalah kebergantungan sebaik sahaja program bermula, dan bukannya berpotensi berjam-jam atau berhari-hari kemudian apabila laluan kod tertentu dilaksanakan.

Cadangan ini menangani kebimbangan ini dengan menyediakan mekanisme untuk mengesahkan import tanpa benar-benar memuatkannya, dan dengan menawarkan kawalan global untuk melumpuhkan lazy loading dalam persekitaran pengeluaran di mana kebolehpercayaan mengatasi kelajuan.

Cabaran Pelaksanaan di Hadapan

Walaupun terdapat semangat, beberapa cabaran teknikal masih kekal. Ciri ini mesti mengendalikan sistem import Python yang kompleks, termasuk import berkitar, kesan sampingan modul, dan keserasian dengan alat sedia ada seperti penyemak jenis dan IDE . Cadangan ini termasuk peruntukan untuk senario ini, tetapi ujian dunia sebenar akan menentukan sejauh mana ia berfungsi dalam amalan.

Python Steering Council akhirnya akan memutuskan sama ada untuk menerima cadangan ini. Jika diluluskan, ia boleh menandakan langkah penting ke arah menjadikan Python lebih berdaya saing untuk aplikasi CLI dan pangkalan kod besar di mana masa permulaan kini mewujudkan geseran untuk pembangun.

Rujukan: PEP 690 – Explicitly-typed imports