Distribusi file python tunggal: modul atau paket?

24

Misalkan saya memiliki fungsi python yang berguna atau kelas (atau apa pun) yang disebut useful_thingyang ada dalam satu file. Ada dua cara penting untuk mengatur pohon sumber. Cara pertama menggunakan modul tunggal:

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

di mana useful_thingdidefinisikan dalam foo.py. Strategi kedua adalah membuat paket:

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

di mana useful_thingdidefinisikan dalam module.py. Dalam kemasan kasus __init__.pyakan terlihat seperti ini

from foo.module import useful_thing

sehingga dalam kedua kasus bisa Anda lakukan from foo import useful_thing.

Pertanyaan: Cara mana yang lebih disukai, dan mengapa?

SUNTING: Karena pengguna nyamuk mengatakan pertanyaan ini tidak terbentuk dengan baik, saya akan menambahkan bahwa tutorial pengemasan python resmi sepertinya tidak mengomentari metode mana yang diuraikan di atas yang lebih disukai. Saya secara eksplisit tidak memberikan daftar pro dan kontra pribadi saya karena saya tertarik pada apakah ada metode yang disukai komunitas, tidak menghasilkan diskusi tentang pro / kontra :)

DanielSank
sumber
Berbagi penelitian Anda membantu semua orang . Beri tahu kami apa yang telah Anda coba dan mengapa itu tidak memenuhi kebutuhan Anda. Ini menunjukkan bahwa Anda telah meluangkan waktu untuk mencoba membantu diri sendiri, itu menyelamatkan kami dari mengulangi jawaban yang jelas, dan yang paling utama itu membantu Anda mendapatkan jawaban yang lebih spesifik dan relevan. Lihat juga Cara Meminta
nyamuk
1
@gnat: Terima kasih atas tautannya ke cara bertanya. Saya menyadari praktik bertanya yang baik, tetapi dalam hal ini saya pikir tidak pantas untuk memberikan pengalaman saya karena itu kemungkinan akan mengubah apa yang saya tanyakan sebagai pertanyaan "A atau B" yang jelas menjadi permintaan pendapat. Bagaimana Anda akan merekomendasikan meningkatkan pertanyaan ini tanpa membuatnya berdasarkan opini?
DanielSank
@gnat: Dengan kata lain, jika saya tertarik pada daftar pro / kontra untuk dua metode, saya akan bertanya "Apa pro dan kontra dari kedua metode ini" dan akan memasukkan sebagian daftar saya sendiri.
DanielSank

Jawaban:

17

Anda melakukan hal paling sederhana yang bekerja untuk Anda .

Untuk modul satu fungsi , sama sekali tidak ada gunanya membuat paket. Paket berguna untuk membuat namespace tambahan dan / atau untuk mengatur kode Anda di beberapa modul.

The jsondan unittestmodul dalam Python perpustakaan standar benar-benar paket misalnya, untuk tujuan kode organisasi. Tetapi sangat baik untuk meninggalkan kode yang saat ini hidup hanya dalam satu file python, sebagai satu modul.

Jika Anda ingin contoh:

Untuk contoh proyek yang baik yang benar-benar memanfaatkan paket, lihat:

Tidak ada rekomendasi 'resmi'; kedua opsi sepenuhnya valid.

Martijn Pieters
sumber
Jadi tidak ada metode resmi yang disukai?
DanielSank
3
Tidak, tidak ada metode yang disukai.
Martijn Pieters