Untuk apa __main__.py
file itu, kode seperti apa yang harus saya masukkan ke dalamnya, dan kapan saya harus memilikinya?
Seringkali, program Python dijalankan dengan menamai file .py pada baris perintah:
$ python my_program.py
Anda juga dapat membuat direktori atau file zip penuh dengan kode, dan termasuk a __main__.py
. Kemudian Anda cukup memberi nama direktori atau file zip pada baris perintah, dan menjalankan __main__.py
secara otomatis:
$ python my_program_dir
$ python my_program.zip
# Or, if the program is accessible as a module
$ python -m my_program
Anda harus memutuskan sendiri apakah aplikasi Anda dapat mengambil manfaat dari dieksekusi seperti ini.
Perhatikan bahwa __main__
modul biasanya tidak berasal dari __main__.py
file. Memang bisa, tetapi biasanya tidak. Ketika Anda menjalankan skrip suka python my_program.py
, skrip akan berjalan sebagai __main__
modul, bukan my_program
modul. Ini juga terjadi untuk modul yang dijalankan seperti python -m my_module
, atau dalam beberapa cara lain.
Jika Anda melihat nama __main__
dalam pesan kesalahan, itu tidak berarti Anda harus mencari __main__.py
file.
python -m program_dir
danpython program_dir
sedikit berbeda: yang terakhir tidak pernah berjalan__init__.py
di direktori (jika ada).python3 program_dir
dan berlari__init__.py
.python3 dir
berjalan__main__.py
tetapi tidak__init__.py
, sedangkanpython3 -m dir
menjalankan keduanya.__main__.py
yang memicu impor__init__.py
Untuk apa
__main__.py
file itu?Saat membuat modul Python, adalah umum untuk membuat modul menjalankan beberapa fungsi (biasanya terkandung dalam suatu
main
fungsi) ketika dijalankan sebagai titik masuk program. Ini biasanya dilakukan dengan idiom umum berikut yang ditempatkan di bagian bawah sebagian besar file Python:Anda bisa mendapatkan semantik yang sama untuk paket Python
__main__.py
. Ini adalah prompt shell linux$
,, jika Anda tidak memiliki Bash (atau shell Posix lain) di Windows, buat saja file-file inidemo/__<init/main>__.py
dengan konten di antaraEOF
s:(Dalam shell Posix / Bash, Anda dapat melakukan hal di atas tanpa huruf
<< EOF
s dan mengakhiriEOF
dengan memasukkan Ctrl+ D, karakter akhir file, di akhir setiap perintah cat)Dan sekarang:
Anda dapat memperoleh ini dari dokumentasi. The dokumentasi mengatakan:
Zip
Anda juga dapat mengemas ini ke dalam satu file dan menjalankannya dari baris perintah seperti ini - tetapi perhatikan bahwa paket zip tidak dapat menjalankan sub-paket atau submodula sebagai titik masuk:
sumber
__main__.py
digunakan untuk program python dalam file zip. The__main__.py
file akan dieksekusi ketika file zip di jalankan. Misalnya, jika file zipnya seperti itu:dan isi
__main__.py
adalahMaka jika kita lari
python test.zip world
kita akanhello world
keluar.Jadi
__main__.py
file dijalankan ketika python dipanggil pada file zip.sumber
Anda membuat
__main__.py
diyourpackage
untuk membuatnya dieksekusi sebagai:sumber
-m
berfungsi jika hanya program yang dapat diakses sebagai modul, kalau tidak Anda bisa menggunakanpython <yourpackage>
CATATAN: tanpa-m
opsipackage
?python -m <yourproject>
tidak berfungsi,-m
adalah opsi yang berlebihan, tetapipython <yourpackage>
berfungsi dengan baik.a
dan asumsi skripa/b/c/__main__.py
...python -m b.c
akan dijalankan dari direktoria
dan impor skrip utama akan relatif terhadapa
. Tetapipython b/c
akan mengeksekusi dari lingkup impor dirc
dan setiap impor seperti di skrip utama sepertiimport b.d
akan gagal.Jika skrip Anda adalah direktori atau file ZIP daripada file python tunggal,
__main__.py
akan dieksekusi ketika "skrip" diteruskan sebagai argumen ke interpreter python.sumber