Rompere un progetto Python di grandi dimensioni in più pacchetti

1

Ho un programma Python di medie dimensioni (12 KLOC) organizzato come un singolo pacchetto Python con più sotto-pacchetti:

proj/
    setup.py
    proj/
        __init__.py
        projfile1.py
        subproj1/
            __init__.py
            subprojfile1.py
            ...
        subproj2/
            __init__.py
            ...
    tests/

Posso vedere che alcuni di questi sotto-pacchetti potrebbero essere autonomi e potrebbero vivere nel loro spazio dei nomi:

proj/
    setup.py
    proj/
        __init__.py
        projfile1.py
        ...
    subproj1/
        __init__.py
        subprojfile1.py
        ...
    subproj2/
        __init__.py
        ...
    tests/

Penso che scomporre i pacchetti secondari potrebbe aiutare a ridurre la complessità futura riducendo l'interdipendenza tra parti separate del programma.

Le uniche importazioni subproj1 al di fuori del suo spazio dei nomi sono funzioni di utilità di un altro subpackage in proj/

Esistono più pacchetti di livello superiore appropriati per un progetto Python? Ci sono progetti organizzati in questo modo?

Quali sono gli svantaggi di organizzare un progetto come più pacchetti Python?

    
posta Bryce Guinta 01.06.2017 - 19:24
fonte

1 risposta

1

Più pacchetti di livello superiore sono in linea di principio OK, ma penso che siano raramente una soluzione appropriata.

Di per sé, una struttura di directory non dice nulla sull'accoppiamento o sulla complessità. La differenza tra una struttura di directory x/a, x/b, x/c e a, b, c è solo una directory. Il design è sempre lo stesso.

Per un'applicazione, devi solo fare tutto ciò che è conveniente per te, specialmente se questa applicazione non è distribuita al di fuori della tua organizzazione. Se trovi più pacchetti di livello superiore convenienti, utilizza il layout di progetto.

Per il codice che verrà utilizzato da altre persone, devi essere più attento. Il problema è che il layout della directory corrisponde a moduli / pacchetti all'interno del tuo codice Python. Non è possibile risolvere conflitti di nomi, quindi è necessario scegliere nomi univoci ragionevolmente per i propri moduli. Ci può essere al massimo un solo modulo di primo livello util . Pertanto, è altamente consigliabile assegnare uno spazio dei nomi a tutti i moduli sotto il nome del progetto. Sebbene Python / PyPI non imponga che questo modulo abbia lo stesso nome del pacchetto installabile tramite pip, questa è una convenzione molto ragionevole.

Un dettaglio in cui la struttura della directory incoraggia l'accoppiamento è la directory tests condivisa. Spesso è meglio posizionare i test per ogni pacchetto all'interno di ciascuna directory. Ad esempio, i test per a non vanno in tests/a ma in a/test .

    
risposta data 17.12.2017 - 10:26
fonte

Leggi altre domande sui tag