Sono un accademico piuttosto che un programmatore e ho molti anni di esperienza nella scrittura di programmi Python per uso personale, a supporto della mia ricerca. Il mio ultimo progetto sarà probabilmente utile a molti altri come me, e sto pensando di pubblicarlo come una libreria Python open source.
Tuttavia, sembrano esserci alcuni ostacoli da attraversare nel passaggio da un progetto personale funzionante a una libreria che può essere installata e utilizzata indolore da altri. Questa domanda riguarda i primi passi che dovrei prendere per iniziare a lavorare verso una versione pubblica.
Al momento, ho un unico repository git che contiene il mio codice che utilizza la libreria e la libreria stessa e utilizzo git come pulsante di annullamento di emergenza in caso di problemi. Tutto questo funziona bene per un singolo utente ma ovviamente non è appropriato se voglio rilasciarlo. Dove voglio finire è che la mia libreria è in un repository separato e può essere installata da altri utenti pip
e ha un'API stabile.
Imparare a usare setuptools ecc. Non è probabilmente così difficile una volta che sono sul punto di volerlo pubblicare - il mio problema è sapere come dovrei lavorare per arrivare a quel punto.
Quindi la mia domanda è: quali sono i primi passi da fare per iniziare a preparare un progetto di libreria Python per il consumo pubblico? Come devo riorganizzare la mia struttura di directory, il mio repository git ecc. Per iniziare a lavorare verso un rilascio pubblico della libreria?
Più in generale, sarebbe molto utile se ci sono risorse che sono note per essere utili quando si tenta di farlo per la prima volta. Sarebbe anche molto utile dare indicazioni su buone pratiche ed errori da evitare, ecc.
Alcuni chiarimenti: le risposte attuali stanno rispondendo a una domanda sulla falsariga di "come posso rendere la mia libreria Python buona da usare per gli altri?" Questo è utile, ma è diverso dalla domanda che intendevo porre.
Sono attualmente all'inizio di un lungo viaggio verso il rilascio del mio progetto. Il nucleo della mia implementazione funziona (e funziona davvero bene), ma mi sento sopraffatto dalla quantità di lavoro che mi attende e sto cercando una guida su come navigare nel processo. Per esempio:
Il mio codice libreria è attualmente accoppiato al mio codice specifico del dominio che lo utilizza. Vive in una sottocartella e condivide lo stesso repository git. Alla fine, dovrà essere trasformato in una libreria autonoma e messo nel suo repository, ma continuo a procrastinare questo perché non so come farlo. (Né come installare una libreria in "modalità di sviluppo" in modo che io possa ancora modificarla, né come mantenere sincronizzati i due repository git.)
Le mie dotstring sono concise, perché so che alla fine dovrò usare Sphinx o qualche altro strumento. Ma questi strumenti sembrano non essere semplici da imparare, quindi questo diventa un grande sottoprogetto e continuo a rimandare.
Ad un certo punto devo imparare a usare setuptools o qualche altro strumento per impacchettarlo e tenere traccia delle dipendenze, che sono piuttosto complesse. Non sono sicuro se devo farlo ora o no, e la documentazione è un labirinto assoluto per un nuovo utente, quindi continuo a decidere di farlo in seguito.
Non ho mai dovuto fare test sistematici, ma lo farò sicuramente per questo progetto, quindi devo (i) imparare abbastanza sui test per sapere quale metodologia è giusta per il mio progetto; (ii) apprendere quali strumenti sono disponibili per la mia metodologia scelta; (iii) imparare a usare il mio strumento scelto; (iv) implementare test suite ecc. per il mio progetto. Questo è un progetto in sé.
Potrebbero esserci anche altre cose che devo fare. Ad esempio, jonrsharpe ha pubblicato un link utile che menziona git-flow, tox, TravisCI, virtualenv e CookieCutter, nessuno dei quali avevo mai sentito parlare prima. (Il post è del 2013, quindi devo anche fare un po 'di lavoro per scoprire quanto è ancora attuale.)
Quando metti tutto insieme è una grande mole di lavoro, ma sono sicuro di riuscire a fare tutto se continuo a collegarlo, e non ho fretta. Il mio problema è sapere come suddividerlo in passaggi gestibili che possono essere eseguiti uno alla volta.
In altre parole, sto chiedendo quali sono i passi concreti più importanti che posso prendere ora, al fine di raggiungere un prodotto rilasciabile alla fine. Se ho un weekend libero, su quali di queste cose dovrei concentrarmi? Quale (se presente) può essere fatto in modo isolato dagli altri, in modo che io possa almeno fare un passo senza dover fare tutto? Qual è il modo più efficace per imparare queste cose in modo che avrò ancora il tempo di concentrarmi sul progetto stesso? (Tenendo presente che tutto ciò è essenzialmente un progetto di hobby, non il mio lavoro.) Esiste qualcosa che non ho davvero bisogno di fare , risparmiando così una grande quantità di tempo e fatica?
Tutte le risposte sono molto apprezzate, ma gradirei in particolare le risposte incentrate su questi aspetti della gestione dei progetti, con specifico riferimento allo sviluppo moderno di Python.