Ho un numero crescente di script che compongono un programma che sto scrivendo e ho deciso che era ora di pulire il mio albero dei sorgenti e impacchettarli correttamente. Sono sicuro che questa è una domanda semplice ma non riesco a scoprire come farlo.Pacchetti "entro" moduli
Se ho un gruppo di moduli, che si adattano insieme, ma uno dovrebbe essere un modulo di livello superiore e gli altri dovrebbero essere preceduti dal nome del modulo ma in realtà vanno in pacchetti di livello inferiore, come posso farlo.
Ad esempio, dire che volevo essere in grado di import mystuff
e ottenere tutti gli elementi. ma dovrei anche essere in grado di import mystuff.test.test1
. Ho pensato di creare un albero di sorgenti come questo,
myprogram/
mystuff.py
mystuff/
__init__.py
tests/
__init__.py
test1.py
test2.py
...
Ma in questo caso, sembra mystuff/
sempre la precedenza su mystuff.py
, così import mystuff
non fa nulla (a patto che mystuff/
s' __init__.py
è vuota).
Quale sarebbe l'approccio corretto per ottenere il comportamento desiderato? O questo non è possibile e devo spostare mystuff.py
in mystuff/
e devo accedervi come mystuff.mystuff
(sembra una ripetizione inutile).
Scusa, se mi sono appena perso qualcosa di ovvio. Presumo che questo debba essere documentato da qualche parte, ma non riesco a trovare dove sia.
Aggiornamento . Mentre credo che il metodo di Ignacio sia corretto, non mi piace molto! Se ho più file aperti nel mio editor e sono tutti chiamati __init__.py
, le cose potrebbero diventare disordinate. Quindi, ho deciso di lasciare la mia struttura così com'è e collegare mystuff.py
a mystuff/__init__.py
. Se qualcuno ha qualche opinione sul perché non dovrei farlo, mi piacerebbe sentirli.
In realtà, alla fine, sto collegando il contrario, dal momento che non sono riuscito a trovare un modo per fare distutils symfer di riferimento durante la creazione di uno tar.gz
, e ho finito con collegamenti interrotti nella mia uscita. In questo modo ha lo stesso effetto e lo mantiene felice.
Sì. Non dovresti farlo perché la risposta di Ignatio è quella corretta. – cwallenpoole
@cwallenpoole.D'accordo, ma alla fine della giornata il modo in cui l'ho impostato ha * esattamente * lo stesso effetto. Anche l'output 'sdist' sarà esattamente lo stesso di Ignacio, senza i miei collegamenti. Quindi mi rende più facile lo sviluppo mentre lo sviluppo. C'è qualche altra ragione per cui questa è una brutta cosa da fare? – tjm