2010-11-08 26 views
14

Python projelerimde birden çok paket kullanmaya başladığım noktaya gelmeye başlıyorum ve her şeyin birlikte nasıl çalıştığıyla ilgili biraz kafam karıştı. Paketin tam olarak __init__.py'a ne girmesi gerekiyor? Gördüğüm bazı projelerin sadece boş girişleri var ve kodlarının hepsi bu pakette modüller halinde. Diğer projeler, paketin sınıfının çoğunluğu gibi görünenleri ve init içindeki işlevleri uygular.python modül düzeni

Python yazarlarının paketler ve __init__ dosyalarının kullanımı için neler düşündüğünü açıklayan bir belge veya stil kılavuzu veya bir şey var mı?

Düzenleme:
Ben bir klasör bir paket yapar basit anlamda __init__.py dosyayı sahip noktası biliyoruz. Ama neden aynı klasörde (paket) bir modül yerine bir işlev yerine koyayım?

cevap

8

__init__.py boş ama ne gerçekten yapar emin Python doğru dizinleri davranır yapmak size paketi (bu satırlar boyunca çevreyi ya da bir şey yapılandırılması) ithal, ya da öyle __all__ tanımlayan zaman için gerekebilir herhangi bir başlatma sağlamak olduğunu edebilir Python, birisi from package import * kullanıyorsa ne yapacağını biliyordur.

Bilmeniz gereken her şey docs on Packages'da açıklanmaktadır. Dive Into Python also has a piece on packaging.

1

Bildiğiniz gibi, Python'un dizinleri paketleri içerdiği şekilde işlemesi için __init__.py dosyalarının gerekli olduğunu tahmin ediyorum.

  1. Yukarıdaki modelde __init__.py boş kalabilir.

  2. Paket için başlatma kodunu da çalıştırabilirsiniz.

  3. Ayrıca __all__ değişkenini de ayarlayabilirsiniz.

: Eğer "from paket import" yaptığınızda [Düzenle öğrendiklerimizi] veya "paket ithal * dan", ardından değişken __all__ seçilen paketleri almak için kullanılabilir.

bakınız. http://docs.python.org/tutorial/modules.html

+0

'__init __ py',' __all__'. Çift alt çizgi –

+0

@Rafe Kettler: Teşekkürler. Evet, Sorunları düzenle. Cevabım seninkiyle aynı ve benimkini göndermeden önce görmedim. – pyfunc

+0

'Paket ithalat öğesinden 'için' __all__' değişkeni nelerin açığa çıkacağını kontrol etmez. Eğer 'item' bir modül veya alt paket ise ve Windows üzerindeyseniz, '__all__'' item'nin büyük harf kullanımını kontrol edebilir, ancak erişebildiğinizi kontrol etmez. –