Modul vs. Paket?

140

Setiap kali saya melakukannya from 'x' import 'y'saya bertanya-tanya mana yang dianggap sebagai 'modul' dan yang 'paket', dan mengapa itu tidak sebaliknya?

Dark Templar
sumber
1
Mengenai mengapa itu bukan sebaliknya, lihat stackoverflow.com/questions/3600352/…
1
Sebagai contoh, saya berterima kasih atas pertanyaan ini, karena jawabannya singkat dan memberikan pengetahuan yang dibutuhkan secara tepat. Dokumentasinya baik-baik saja dan keren, tetapi sangat jelas dan berisi lebih banyak informasi daripada yang diminta OP, dan tentu saja lebih dari yang saya butuhkan. Saya hanya ingin jawaban untuk pertanyaan spesifik itu, dan jawaban di bawah ini tepat seperti yang saya inginkan. Banyak dari kita hanya tidak membutuhkan jawaban formal atau mendalam seperti itu.
Teekin
Konsep terkait yang perlu diketahui - Kelas vs modul dalam Python
RBT

Jawaban:

192

Modul Python hanyalah file sumber Python, yang dapat mengekspos kelas, fungsi dan variabel global.

Saat diimpor dari file sumber Python lain, nama file diperlakukan sebagai namespace.

Paket Python hanyalah sebuah direktori modul Python.

Misalnya, bayangkan pohon direktori berikut di /usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

Maka Anda akan melakukan:

import mypackage.mymodule

atau

from mypackage.mymodule import myclass
Yam Marcovic
sumber
Aha, jadi ketika Anda mengatakan bahwa nama file diperlakukan sebagai namespace, Anda akan jadi seperti ini? "mymodule.var1" untuk kasus pertama, atau "myclass.var1" untuk yang kedua?
Dark Templar
1
Tidak persis. Paket masih dianggap sebagai bagian dari namespace. Jika Anda ingin melakukan apa yang Anda katakan maka Anda perlu melakukan dari mypackage import mymodule.
Yam Marcovic
Mungkin berguna untuk menambahkan sesuatu tentang paket namespace, yang kode tidak perlu semua muncul di pohon direktori yang sama.
holdenweb
@ holdenweb Tidak pernah menggunakan mekanisme berbeda yang terlibat di sana secara langsung, jadi bukan pakar. Jika Anda memberikan penjelasan terperinci tentang itu dalam jawaban baru, saya akan merujuknya dari saya.
Yam Marcovic
Mungkin agak terlalu esoteris untuk menjadi sia-sia, kalau dipikir
holdenweb