Sto costruendo un sito che si basa sull'output di un algoritmo di apprendimento automatico. Tutto ciò che è necessario per la parte del sito rivolta all'utente è l'output dell'algoritmo (etichette di classe per un insieme di elementi), che può essere facilmente memorizzato e recuperato dai modelli . L'algoritmo può essere eseguito una volta al giorno e non si basa sull'input dell'utente.Separazione di parti di sviluppo e produzione del progetto Django
Quindi questa parte del sito dipende solo da e pacchetti correlati.
Ma sviluppo, tuning, e valutare l'algoritmo utilizza molti altri pacchetti python come scikit-learn
, pandas
, numpy
, matplotlib
, ecc richiede anche risparmio molti gruppi diversi di etichette di classe.
Queste dipendenze causare alcuni problemi durante la distribuzione di heroku
, perché numpy
richiede LAPACK/BLAS.
Sembra anche come sarebbe buona norma avere il minor numero possibile di dipendenze in app distribuito.
Come posso separare la parte di apprendimento automatico dalla parte rivolta all'utente, ma, tuttavia, sono ancora abbastanza integrati da consentire l'utilizzo facile dei risultati dell'algoritmo?
Ho pensato di creare due progetti separati, e quindi scrivere in qualche modo sul database dell'utente, ma sembra che porti a problemi di manutenzione (gestione delle dipendenze, modifiche agli schemi di database, ecc.).
Per quanto ho capito, questo problema è leggermente diverso dall'utilizzo di impostazioni o database diversi per la produzione e lo sviluppo, poiché si tratta più della gestione di diversi set di dipendenze.
Perché pensi che la gestione delle dipendenze e dei cambiamenti nello schema del database è un problema? Devi affrontarli comunque, giusto? –
Inoltre, non sono sicuro che il titolo sia preciso. Sembra che sia il sito sia il codice dell'algoritmo saranno in produzione. –
Con un progetto ho solo tutte le dipendenze in un ambiente virtuale. Avere due progetti con dipendenze parzialmente sovrapposte sembra più complicato. A meno che non ci sia un modo per avere un ambiente essere un sottoinsieme dell'altro. – ajerneck