Modül vs. Paket?


140

Ne zaman yaparsam from 'x' import 'y', hangisinin 'modül' olarak kabul edildiğini ve hangisinin 'paket' olduğunu ve neden bunun tersi olmadığını merak ediyordum?


1
Neden bunun

1
Birincisi, bu soru için müteşekkirim, çünkü cevap özlü ve tam olarak gerekli bilgiyi veriyor. Belgeler tamamen iyi ve zordur, ancak ayrıntılı ve OP'nin istediğinden daha fazla bilgi içeriyor ve kesinlikle ihtiyacım olandan daha fazlasını içeriyor. Sadece o özel soruya bir cevap istedim ve aşağıdaki cevap tam olarak istediğim şeydi. Birçoğumuz böyle resmi veya derinlemesine cevaplara ihtiyacımız yok.
Teekin

Bilmeniz gereken bir kavram - Python'daki Sınıflar vs. modüller
RBT

Yanıtlar:


192

Bir Python modülü sadece sınıfları, fonksiyonları ve global değişkenleri gösterebilen bir Python kaynak dosyasıdır.

Başka bir Python kaynak dosyasından içe aktarıldığında, dosya adı bir ad alanı olarak kabul edilir.

Bir Python paketi sadece Python modülünün bir dizinidir.

Örneğin, aşağıdaki dizin ağacını içinde düşünün /usr/lib/python/site-packages:

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

O zaman yapardın:

import mypackage.mymodule

veya

from mypackage.mymodule import myclass

Aha, dosya adının bir ad alanı olarak değerlendirildiğini söylediğinizde, böyle bir şey olur mu? ilk durum için "mymodule.var1", ikincisi için "myclass.var1"?
Karanlık Tapınakçılar

1
Tam olarak değil. Paket hala ad alanının bir parçası olarak sayılıyor. Söylediklerinizi yapmak istiyorsanız, o zaman benim paket ithalat ithal modülümden yapmanız gerekir.
Yam Marcovic

Kodun hepsinin mutlaka aynı dizin ağacında görünmesi gerekmeyen ad alanı paketleri hakkında bir şeyler eklemek yararlı olabilir.
holdenweb

@holdenweb Asla doğrudan orada bulunan farklı mekanizmaları kullanmadı, bu yüzden bir uzman değil. Yeni bir cevapta bunun hakkında ayrıntılı bir açıklama yaparsanız, ben de kendimden bahsedeceğim.
Yam Marcovic,

Muhtemelen biraz fazla ezoterik, buna değer, geriye dönük olarak
holdenweb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.