Apa perbedaan antara modul Python dan paket Python?
Lihat juga: Apa perbedaan antara "paket" dan "modul" (untuk bahasa lain)
Apa perbedaan antara modul Python dan paket Python?
Lihat juga: Apa perbedaan antara "paket" dan "modul" (untuk bahasa lain)
__init__.py
file.from plumbum.cmd import ls
implementasi__init__.py
Jawaban:
Modul adalah file tunggal (atau file) yang diimpor dengan satu impor dan digunakan. misalnya
Paket adalah kumpulan modul dalam direktori yang memberikan hierarki paket.
Dokumentasi untuk modul
Pengantar paket
sumber
__path__
atribut.__init__.py
file. Mereka adalah modul yang dapat berisi modul lain.__path__
atribut.File Python adalah modul , namanya menjadi nama dasar file tanpa
.py
ekstensi. Sebuah paket adalah kumpulan dari modul Python: sementara modul adalah file Python tunggal, sebuah paket adalah direktori modul Python yang berisi tambahan__init__.py
file, untuk membedakan sebuah paket dari sebuah direktori yang kebetulan mengandung banyak skrip Python. Paket dapat disarangkan ke kedalaman apa saja, asalkan direktori terkait berisi__init__.py
file mereka sendiri .Perbedaan antara modul dan paket tampaknya hanya pada tingkat sistem file. Saat Anda mengimpor modul atau paket, objek terkait yang dibuat oleh Python selalu bertipe
module
. Catatan, bagaimanapun, ketika Anda mengimpor paket, hanya variabel / fungsi / kelas dalam__init__.py
file paket yang langsung terlihat, bukan sub-paket atau modul. Sebagai contoh, pertimbangkanxml
paket di pustaka standar Python:xml
direktori -nya berisi__init__.py
file dan empat sub-direktori; sub-direktorietree
berisi__init__.py
file dan, antara lain,ElementTree.py
file. Lihat apa yang terjadi ketika Anda mencoba mengimpor paket / modul secara interaktif:Dalam Python ada juga modul built-in, seperti
sys
, yang ditulis dalam C, tapi saya tidak berpikir Anda bermaksud mempertimbangkan mereka dalam pertanyaan Anda.sumber
module
. Saya sedang dalam proses menulis debugger dan khawatir bahwa debugger saya salah dalam mengatakan bahwa paket saya adalahmodule
s.import
pernyataan biasa , karena tanda hubung tidak diperbolehkan dalam pengidentifikasi Python. Gunakanimportlib.import_module()
sebagai gantinya.Dari daftar istilah Python :
File Python dengan tanda hubung dalam nama, seperti
my-file.py
, tidak dapat diimpor denganimport
pernyataan sederhana . Dari sisi kode,import my-file
sama denganimport my - file
yang akan memunculkan eksepsi. File-file seperti itu lebih baik ditandai sebagai skrip sedangkan file yang dapat diimpor adalah modul .sumber
Pertama, perlu diingat bahwa, dalam definisi yang tepat, modul adalah objek dalam memori juru bahasa Python, sering dibuat dengan membaca satu atau lebih file dari disk. Meskipun kami secara informal dapat memanggil file disk seperti
a/b/c.py
"modul," itu tidak benar-benar menjadi satu sampai dikombinasikan dengan informasi dari beberapa sumber lain (sepertisys.path
) untuk membuat objek modul.(Perhatikan, misalnya, bahwa dua modul dengan nama berbeda dapat diambil dari file yang sama, tergantung pada
sys.path
dan pengaturan lainnya. Inilah yang terjadi denganpython -m my.module
diikuti olehimport my.module
penerjemah; akan ada dua objek modul,__main__
danmy.module
, keduanya dibuat dari file yang sama pada diskmy/module.py
,.)Sebuah paket adalah modul yang mungkin memiliki submodul (termasuk subpackages). Tidak semua modul dapat melakukan ini. Sebagai contoh, buat hierarki modul kecil:
Pastikan tidak ada file lain di bawah
a
. Mulai juru bahasa Python 3.4 atau yang lebih baru (mis. Denganpython3 -i
) dan periksa hasil dari pernyataan berikut:Modul
a
dana.b
paket (pada kenyataannya, jenis paket tertentu disebut "paket namespace," meskipun kami tidak khawatir tentang itu di sini). Namun, modula.b.c
bukan paket. Kami dapat menunjukkan ini dengan menambahkan file lain,a/b.py
ke struktur direktori di atas dan memulai juru bahasa baru:Python memastikan bahwa semua modul induk dimuat sebelum modul anak dimuat. Di atasnya ditemukan bahwa itu
a/
adalah direktori, dan menciptakan paket namespacea
, dan itua/b.py
adalah file sumber Python yang dimuat dan digunakan untuk membuat modul (non-paket)a.b
. Pada titik ini Anda tidak dapat memiliki modula.b.c
karenaa.b
bukan paket, dan dengan demikian tidak dapat memiliki submodula.Anda juga dapat melihat di sini bahwa modul paket
a
memiliki__path__
atribut (paket harus memiliki ini) tetapi modul non-paketa.b
tidak.sumber
Jawaban yang terlambat, definisi lain:
Jadi secara fisik paket adalah unit distribusi, yang menyediakan satu atau lebih modul.
sumber
__init__.py
modul di dalamnya, namun jika Anda berbicara tentang unit distribusi (umumnya melalui PyPI) maka ini adalah jenis paket lain seluruhnya (biasanya ditentukan oleh keberadaansetup.py
). Saya menemukan dua penggunaan istilah inipackage
membingungkan, dan saya telah berbicara dengan beberapa pemula Python yang merasa sangat membingungkan.