Scrivo codice Python per il calcolo scientifico. Come è la ricerca, mi trovo ad affrontare altri due problemi:
- le richieste cambiano rapidamente I risultati
- devono rimanere riproducibili
Immagina di avere un pacchetto A che è necessario in un vecchio progetto e poi di nuovo in uno nuovo. Il nuovo progetto richiede tuttavia alcune modifiche (questo non sarebbe un problema se si potesse mantenere la compatibilità all'indietro, ma ho sperimentato che ciò è praticamente impossibile in piccoli moduli molto specializzati). Le installazioni di sistema non consentirebbero di rieseguire il vecchio codice. Sono richieste installazioni separate.
Attualmente risolvo questo problema con i sottomoduli git: Il pacchetto A è sviluppato in un repository git e incluso come sottomodulo in entrambi i progetti. In questo modo, il codice dei progetti può sempre essere eseguito e gli aggiornamenti del pacchetto possono essere facilmente propagati.
Tuttavia, ho riscontrato un problema pratico con le importazioni python. La struttura delle cartelle di un pacchetto A sarebbe simile a questa:
A - A - mod.py
| |- __init__.py
|- B
|- C
Dove B e C contengono pacchetti necessari per A e le cartelle vengono aggiunte al percorso python in init .py di A. Tuttavia, questo porta a un caso in cui un pacchetto è stato usato due volte e con diverse versioni:
A - A - mod.py
| |- __init__.py
|- B - B - mod2.py
| | |- __init__.py
| |- C
|- C
vale a dire. sia A sia B hanno portato la loro "propria" versione del pacchetto C. Quando B aggiunge C al percorso python, la cartella viene ignorata, perché viene semplicemente utilizzata la cartella, che è stata aggiunta da A. Questo può essere risolto specificando il percorso corretto quando si importa. Ma diventa un po 'brutto (vedi. link )
A causa di questo ho iniziato a chiedermi se questo è il modo giusto per ridurre la duplicazione del codice mentre si assicura un codice valido in un ambiente in rapida evoluzione. Vedi alternative / modi migliori?