Jestem raczej naukowcem niż programistą i mam wieloletnie doświadczenie w pisaniu programów Python na własny użytek, aby wesprzeć moje badania. Mój najnowszy projekt może się przydać wielu innym osobom, a także mnie, i myślę o wydaniu go jako biblioteki Pythona typu open source.
Wydaje się jednak, że przejście od działającego projektu osobistego do biblioteki, która może być bezproblemowo zainstalowana i używana przez innych, wymaga wielu przeszkód. To pytanie dotyczy pierwszych kroków, które powinienem podjąć, aby rozpocząć pracę nad wydaniem publicznym.
Obecnie mam jedno repozytorium git, które zawiera mój kod, który korzysta zarówno z biblioteki, jak i samej biblioteki, i używam git jako awaryjnego przycisku cofania na wypadek, gdyby coś się zepsuło. Wszystko to działa dobrze dla jednego użytkownika, ale oczywiście nie jest odpowiednie, jeśli chcę je wydać. Chcę, aby moja biblioteka pip
znalazła się w osobnym repozytorium i mogła być instalowana przez innych użytkowników oraz miała stabilny interfejs API.
Nauka używania setuptools itp. Prawdopodobnie nie jest tak trudna, kiedy chcę opublikować - moim problemem jest wiedzieć, jak powinienem pracować, aby dojść do tego punktu.
Moje pytanie brzmi: jakie są pierwsze kroki, aby rozpocząć przygotowywanie projektu biblioteki Python do publicznego użytku? Jak powinienem zreorganizować strukturę katalogów, repozytorium git itp., Aby rozpocząć pracę nad publicznym wydaniem biblioteki?
Mówiąc bardziej ogólnie, bardzo pomocne byłoby, gdyby istniały zasoby, o których wiadomo, że są pomocne przy pierwszej próbie. Bardzo pomocne byłyby również wskazówki dotyczące najlepszych praktyk i błędów, których należy unikać itp.
Pewne wyjaśnienie: obecne odpowiedzi odpowiadają na pytanie w stylu „w jaki sposób mogę uczynić moją bibliotekę Python dobrą dla innych?” Jest to przydatne, ale różni się od pytania, które chciałem zadać.
Jestem obecnie na początku długiej podróży w kierunku wydania mojego projektu. Rdzeń mojej implementacji działa (i działa naprawdę dobrze), ale czuję się przytłoczony ilością pracy przede mną i szukam wskazówek, jak nawigować po tym procesie. Na przykład:
Mój kod biblioteki jest obecnie sprzężony z moim własnym kodem specyficznym dla domeny, który go używa. Żyje w podfolderze i dzieli to samo repozytorium git. W końcu będzie trzeba go przekształcić w samodzielną bibliotekę i umieścić we własnym repozytorium, ale wciąż zwlekam z tym, ponieważ nie wiem, jak to zrobić. (Ani jak zainstalować bibliotekę w „trybie programowania”, aby móc ją nadal edytować, ani jak zachować synchronizację dwóch repozytoriów git).
Moje dokumenty są zwięzłe, ponieważ wiem, że w końcu będę musiał użyć Sfinksa lub innego narzędzia. Ale narzędzia te wydają się nie być łatwe do nauczenia, więc staje się to dużym podprojektem i ciągle go odkładam.
W pewnym momencie muszę nauczyć się korzystać z setuptools lub innego narzędzia do pakowania i śledzenia zależności, które są dość złożone. Nie jestem pewien, czy muszę to zrobić teraz, czy nie, a dokumentacja jest absolutnym labiryntem dla nowego użytkownika, więc postanawiam to zrobić później.
Nigdy nie musiałem przeprowadzać systematycznych testów, ale na pewno zrobię to dla tego projektu, więc muszę (i) nauczyć się wystarczająco dużo o testowaniu, aby wiedzieć, która metodologia jest odpowiednia dla mojego projektu; (ii) dowiedzieć się, jakie narzędzia są dostępne dla mojej wybranej metodologii; (iii) nauczyć się korzystać z mojego wybranego narzędzia; (iv) zaimplementuj pakiety testowe itp. dla mojego projektu. To jest projekt sam w sobie.
Mogą być też inne rzeczy, które muszę zrobić. Na przykład jonrsharpe opublikował pomocny link, który wspomina o git-flow, tox, TravisCI, virtualenv i CookieCutter, o którym wcześniej nie słyszałem. (Stanowisko pochodzi z 2013 r., Więc muszę również popracować, aby dowiedzieć się, ile nadal jest aktualne).
Po złożeniu tego w całość jest to ogromna praca, ale jestem pewien, że mogę to wszystko zrobić, jeśli będę się starał to zatkać i nie będę się spieszył. Moim problemem jest umiejętność podzielenia go na wykonalne kroki, które można wykonać pojedynczo.
Innymi słowy, pytam, jakie są najważniejsze konkretne kroki, które mogę teraz podjąć, aby ostatecznie uzyskać produkt, który można wydać. Jeśli mam wolny weekend, na których z tych rzeczy powinienem się skupić? Które (jeśli w ogóle) można zrobić w oderwaniu od innych, abym mógł przynajmniej wykonać jeden krok bez konieczności robienia wszystkiego? Jaki jest najskuteczniejszy sposób na nauczenie się tych rzeczy, aby mieć czas na skupienie się na samym projekcie? (Pamiętając, że to wszystko jest w zasadzie projektem hobby, a nie moją pracą.) Czy jest coś takiego, czego tak naprawdę nie muszę robić , oszczędzając w ten sposób ogromną ilość czasu i wysiłku?
Wszystkie odpowiedzi są bardzo mile widziane, ale szczególnie chciałbym powitać odpowiedzi, które koncentrują się na tych aspektach zarządzania projektami, ze szczególnym odniesieniem do współczesnego rozwoju Pythona.