Mengapa __init__.py diperlukan, mungkin semua pythonist tahu, tetapi bagaimana dengan __main__.py ? Saya telah melihat banyak proyek, baik bekerja atau di Github, yang tidak menggunakan file ajaib ini, meskipun mereka dapat membuat hidup mereka lebih mudah. Menurut pendapat saya, __main__.py adalah cara terbaik untuk berinteraksi dengan modul Python yang terdiri dari beberapa file.
Tapi mari kita perbaiki dulu: bagaimana kebanyakan orang menjalankan skrip Python mereka?
Setelah Anda menulis program yang ingin Anda gunakan baik sebagai modul yang diimpor dan sebagai alat diluncurkan dari baris perintah. Anda kemungkinan besar tahu apa yang biasanya dilakukan dalam kasus ini:
if __name__ == '__main__': main(sys.argv)
Saat Anda mengumpankan skrip ke penerjemah, variabel global sihir __name__ mendapatkan nilai __main__ . Jadi, kita belajar bahwa ini bukan impor, tetapi peluncuran. Sebagai contoh:
python myapp.py
Dan ini berfungsi baik untuk satu file.
Masalah
Tetapi jika Anda seperti saya, Anda tidak ingin seluruh aplikasi Anda dijejalkan ke dalam satu file. Memisahkan logika menjadi beberapa file menyederhanakan penyuntingan dan dukungan. Sebagai contoh:
. ├── README.me ├── requirements.txt ├── setup.py └── src ├── __init__.py ├── client.py ├── logic.py ├── models.py └── run.py
Tetapi pengguna yang mengkloning proyek dari repositori tidak akan mengerti - mana dari file-file ini yang utama? Apakah run.py benar-benar? Atau mungkin client.py ? Di mana mencari string yang dikenal jika __name__ == '__main__' ? Di sinilah __main__.py dapat membuktikan sendiri.
__main__.py
File __main__.py dipanggil ketika proyek dimulai dengan flag modul - -m . Dan ini sangat nyaman jika kode ini dimaksudkan untuk digunakan sebagai modul dan untuk diluncurkan dari konsol. Pikirkan file ini sebagai tempat untuk meletakkan semua yang biasanya Anda masukkan ke dalam jika __name__ == ' __main__' . Mari kita ubah proyek dari contoh di atas sesuai:
. ├── README.me ├── requirements.txt ├── setup.py └── myapp ├── __init__.py ├── __main__.py ├── client.py ├── logic.py ├── models.py
Dan voila! Sekarang Anda cukup memulai proyek sebagai modul reguler.
python -m myapp
__main__.py akan dieksekusi secara otomatis. Ini adalah tempat yang sempurna untuk meng-host antarmuka baris perintah dan menangani argumen input!