Distribuzione di singoli file Python: modulo o pacchetto?


24

Supponiamo di avere un'utile funzione o classe python (o qualunque altra cosa) useful_thingche esista in un singolo file. Esistono essenzialmente due modi per organizzare l'albero dei sorgenti. Il primo modo utilizza un singolo modulo:

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

dove useful_thingè definito in foo.py. La seconda strategia è quella di creare un pacchetto:

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

dove useful_thingè definito in module.py. Nel caso del pacchetto __init__.pysarebbe simile a questo

from foo.module import useful_thing

in modo che in entrambi i casi tu possa fare from foo import useful_thing.

Domanda: quale modo è preferito e perché?

EDIT: Poiché l'utente gnat afferma che questa domanda è scarsamente formata, aggiungerò che il tutorial ufficiale sul packaging in python non sembra commentare quale dei metodi sopra descritti è quello preferito. Sto esplicitamente non dando la mia lista personale dei pro e dei contro perché sono interessati a sapere se c'è un metodo comunitario preferito, non generando una discussione di pro / contro :)


Condividere la tua ricerca aiuta tutti . Raccontaci cosa hai provato e perché non ha soddisfatto le tue esigenze. Ciò dimostra che hai impiegato del tempo per cercare di aiutarti, ci salva dal ribadire risposte ovvie e soprattutto ti aiuta a ottenere una risposta più specifica e pertinente. Vedi anche Come chiedere
moscerino il

1
@gnat: grazie per il link a come chiedere. Sono consapevole della buona pratica di fare domande, ma in questo caso non pensavo che fosse appropriato dare la mia esperienza perché ciò avrebbe probabilmente trasformato ciò che ho posto come una chiara domanda "A o B" in una richiesta di opinioni. Come consiglieresti di migliorare questa domanda senza renderla basata sull'opinione?
DanielSank

@gnat: In altre parole, se fossi interessato a un elenco di pro / contro per i due metodi, avrei chiesto "Quali sono i pro e i contro di questi due metodi" e avrei incluso il mio elenco parziale.
DanielSank

Risposte:


17

Fai la cosa più semplice che funziona per te .

Per un modulo a una funzione , non ha assolutamente senso creare un pacchetto. I pacchetti sono utili per creare uno spazio dei nomi aggiuntivo e / o per organizzare il codice su più moduli.

I moduli jsone unittestnella libreria standard di Python sono pacchetti ad esempio, per scopi di organizzazione del codice. Ma è perfettamente bene lasciare il codice che attualmente vive in un solo file Python, come un modulo.

Se vuoi esempi:

Per un buon esempio di progetti che fanno davvero un uso eccellente dei pacchetti, guarda:

Non esiste una raccomandazione "ufficiale"; entrambe le opzioni sono interamente valide.


Quindi non esiste un metodo ufficialmente preferito?
DanielSank

3
No, non esiste un metodo preferito.
Martijn Pieters,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.