Tek python dosya dağılımı: modül veya paket?


24

useful_thingTek bir dosyada bulunan kullanışlı bir python işlevi veya sınıfım (veya her ne olursa olsun) olduğunu varsayalım . Kaynak ağacı düzenlemenin esasen iki yolu vardır. İlk yol tek bir modül kullanıyor:

- setup.py
- README.rst
- ...etc...
- foo.py

burada useful_thingtanımlanmıştır foo.py. İkinci strateji bir paket yapmaktır:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

burada useful_thingtanımlanmıştır module.py. Paket halinde __init__.pybu gibi görünüyor

from foo.module import useful_thing

Böylece her iki durumda da yapabilirsiniz from foo import useful_thing.

Soru: Hangi yoldan tercih edilir ve neden?

EDIT: Gnat kullanıcısı bu sorunun kötü bir şekilde oluşturulduğunu söylediğinden, resmi python paketleme eğitiminin yukarıda açıklanan yöntemlerden hangisinin tercih edildiği konusunda yorum yapmadığını ekleyeceğim. Ben açıkça am değil ben lehte / aleyhte bir tartışma oluşturan bir topluluk tercih edilen yöntem, olup olmadığı ile ilgilenen olduğum için artıları ve eksileri benim kişisel listesini veren :)


Araştırmanızı paylaşmak herkese yardımcı olur . Bize ne denediğinizi ve neden ihtiyaçlarınızı karşılamadığını söyleyin. Bu, kendinize yardım etmek için zaman harcadığınızı, bariz cevapları tekrar etmemizi önlediğini ve hepsinden daha belirgin ve alakalı bir cevap almanıza yardımcı olduğunu gösteriyor. Ayrıca Nasıl
Sorulur

1
@gnat: Nasıl sorulacağınız için bağlantı için teşekkür ederiz. İyi soru sorma pratiğinin farkındayım, ancak bu durumda deneyimlerimi vermenin uygun olduğunu düşünmedim, çünkü bu muhtemelen net bir "A veya B" sorusu sorduğumun fikirlerin alınmasını istediğine neden olur. Bu soruyu fikir temelli olmadan nasıl geliştirmeyi önerirsiniz?
DanielSank

@gnat: Başka bir deyişle, iki yöntem için bir artı / eksiler listesiyle ilgileniyor olsaydım, "Bu iki yöntemin artıları ve eksileri nelerdir" diye sorardım ve kendi kısmi listemi eklerdim.
DanielSank

Yanıtlar:


17

İşe yarayan en basit şeyi yaptınız .

Bir İçin tek fonksiyon modülü , kesinlikle bir paket oluşturarak hiçbir anlamı yoktur. Paketler, ek bir ad alanı oluşturmak ve / veya kodunuzu birden fazla modülde düzenlemek için kullanışlıdır.

jsonVe unittestPython standart kütüphanede modüller gerçekten kod organizasyon amaçlı, örneğin paketler bulunmaktadır. Ancak şu anda sadece bir python dosyasında yaşayan bir kodu tek modül olarak bırakmak çok iyi.

Örnek istiyorsan:

Paketleri gerçekten mükemmel bir şekilde kullanan projelere güzel bir örnek için, şunlara bakın:

'Resmi' bir öneri yoktur; Her iki seçenek de tamamen geçerlidir.


Yani resmi olarak tercih edilen bir yöntem yok mu?
DanielSank

3
Hayır, tercih edilen bir yöntem yoktur.
Martijn Pieters,
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.