Ich bin eher ein Akademiker als ein Programmierer, und ich habe viele Jahre Erfahrung darin, Python-Programme für meinen eigenen Gebrauch zu schreiben, um meine Forschung zu unterstützen. Mein neuestes Projekt wird wahrscheinlich auch vielen anderen nützlich sein und ich denke darüber nach, es als Open-Source-Python-Bibliothek herauszubringen.
Es scheint jedoch einige Hürden zu geben, von einem funktionierenden persönlichen Projekt zu einer Bibliothek überzugehen, die von anderen problemlos installiert und verwendet werden kann. Diese Frage handelt von den ersten Schritten, die ich unternehmen sollte, um auf eine Veröffentlichung hinzuarbeiten.
Derzeit habe ich ein einzelnes Git-Repository, das meinen Code enthält, der die Bibliothek sowie die Bibliothek selbst verwendet, und ich verwende Git als Notfall-Rückgängig-Schaltfläche, falls etwas kaputt geht. All dies funktioniert gut für einen einzelnen Benutzer, ist aber offensichtlich nicht angebracht, wenn ich es freigeben möchte. Am Ende möchte ich wissen, dass sich meine Bibliothek in einem separaten Repository befindet, von anderen mithilfe von installiert werden pipkann und über eine stabile API verfügt.
Das Erlernen der Verwendung von Setuptools usw. ist wahrscheinlich nicht so schwierig, wenn ich es erst einmal veröffentlichen möchte. Mein Problem besteht darin, zu wissen, wie ich arbeiten soll, um an diesen Punkt zu gelangen.
Meine Frage ist also, welche ersten Schritte sollten Sie unternehmen, um ein Python-Bibliotheksprojekt für den öffentlichen Konsum vorzubereiten? Wie sollte ich meine Verzeichnisstruktur, mein Git-Repository usw. neu organisieren, um auf eine Veröffentlichung der Bibliothek hinzuarbeiten?
Generell wäre es sehr hilfreich, wenn es Ressourcen gibt, von denen bekannt ist, dass sie hilfreich sind, wenn Sie dies zum ersten Mal versuchen. Hinweise auf bewährte Verfahren und zu vermeidende Fehler usw. wären ebenfalls sehr hilfreich.
Einige Erläuterungen: Die aktuellen Antworten beziehen sich auf eine Frage wie "Wie kann ich meine Python-Bibliothek für andere gut machen?" Dies ist nützlich, unterscheidet sich aber von der Frage, die ich stellen wollte.
Ich bin gerade am Anfang einer langen Reise in Richtung Veröffentlichung meines Projekts. Der Kern meiner Implementierung funktioniert (und funktioniert wirklich gut), aber ich fühle mich von der Menge an Arbeit, die vor mir liegt, überwältigt und suche nach Anleitungen zur Steuerung des Prozesses. Beispielsweise:
Mein Bibliothekscode ist derzeit an meinen eigenen domänenspezifischen Code gekoppelt, der ihn verwendet. Es befindet sich in einem Unterordner und hat dasselbe Git-Repository. Irgendwann muss es zu einer eigenständigen Bibliothek gemacht und in ein eigenes Repository gestellt werden, aber ich zögere das immer wieder, weil ich nicht weiß, wie es geht. (Weder wie man eine Bibliothek im 'Entwicklungsmodus' installiert, damit ich sie noch bearbeiten kann, noch wie man die beiden Git-Repos synchron hält.)
Meine Dokumente sind knapp, weil ich weiß, dass ich irgendwann Sphinx oder ein anderes Tool verwenden muss. Aber diese Werkzeuge scheinen nicht einfach zu erlernen zu sein, so dass dies ein wichtiges Unterprojekt wird und ich es immer wieder aufschiebe.
Irgendwann muss ich lernen, setuptools oder ein anderes Tool zu verwenden, um es zu packen und die Abhängigkeiten zu verfolgen, die recht komplex sind. Ich bin mir nicht sicher, ob ich das jetzt tun muss oder nicht, und die Dokumentation ist ein absolutes Labyrinth für einen neuen Benutzer, deshalb entscheide ich mich weiterhin dafür, es später zu tun.
Ich musste noch nie systematisch testen, werde es aber definitiv für dieses Projekt tun. Daher muss ich (i) genug über das Testen lernen, um zu wissen, welche Methodik für mein Projekt geeignet ist. (ii) zu erfahren, welche Tools für die von mir gewählte Methodik zur Verfügung stehen; (iii) lernen, mein gewähltes Werkzeug zu benutzen; (iv) Implementieren von Testsuiten usw. für mein Projekt. Dies ist ein Projekt für sich.
Es kann auch andere Dinge geben, die ich tun muss. Zum Beispiel hat jonrsharpe einen hilfreichen Link gepostet , der auf git-flow, tox, TravisCI, virtualenv und CookieCutter verweist, von denen ich vorher noch nichts gehört hatte. (Der Beitrag stammt aus dem Jahr 2013, daher muss ich noch einige Arbeiten durchführen, um herauszufinden, wie viel noch aktuell ist.)
Wenn Sie das alles zusammenstellen, ist das eine enorme Menge an Arbeit, aber ich bin sicher, dass ich alles erledigen kann, wenn ich weiter dranbleibe, und ich habe es nicht eilig. Mein Problem ist, zu wissen, wie man es in handhabbare Schritte zerlegt, die einzeln ausgeführt werden können.
Mit anderen Worten, ich frage nach den wichtigsten konkreten Schritten, die ich jetzt unternehmen kann, um schließlich zu einem ablösbaren Produkt zu gelangen. Auf welche dieser Dinge sollte ich mich konzentrieren, wenn ich ein freies Wochenende habe? Was kann (wenn überhaupt) isoliert von den anderen gemacht werden, so dass ich wenigstens einen Schritt machen kann, ohne das Ganze machen zu müssen? Was ist der effizienteste Weg, um diese Dinge zu lernen, sodass ich noch Zeit habe, mich auf das Projekt selbst zu konzentrieren? (In Anbetracht dessen, dass all dies im Wesentlichen ein Hobbyprojekt ist, nicht mein Job.) Gibt es etwas, das ich eigentlich nicht tun muss , wodurch ich mir viel Zeit und Mühe erspare?
Alle Antworten werden sehr geschätzt, aber ich würde mich besonders über Antworten freuen, die sich auf diese Projektmanagementaspekte konzentrieren, unter besonderer Berücksichtigung der modernen Python-Entwicklung.