Je suis un universitaire plutôt qu'un programmeur, et j'ai de nombreuses années d'expérience dans l'écriture de programmes Python pour mon propre usage, pour soutenir ma recherche. Mon dernier projet est susceptible d'être utile à beaucoup d'autres ainsi qu'à moi, et je pense à le publier en tant que bibliothèque Python open source.
Cependant, il semble qu'il y ait pas mal d'obstacles à franchir pour passer d'un projet personnel fonctionnel à une bibliothèque qui peut être installée et utilisée sans douleur par d'autres. Cette question concerne les premières étapes à suivre pour commencer à travailler vers une version publique.
Actuellement, j'ai un seul dépôt git qui contient mon code qui utilise la bibliothèque ainsi que la bibliothèque elle-même, et j'utilise git comme bouton d'annulation d'urgence en cas de rupture. Tout cela fonctionne bien pour un seul utilisateur mais n'est évidemment pas approprié si je veux le libérer. Là où je veux finir, c'est que ma bibliothèque est dans un référentiel séparé et peut être installée par d'autres utilisateurs pip
, et possède une API stable.
Apprendre à utiliser setuptools, etc. n'est probablement pas si difficile une fois que je suis sur le point de vouloir le publier - mon problème est de savoir comment je dois travailler pour arriver à ce point.
Donc ma question est, quelles sont les premières étapes à suivre pour commencer à préparer un projet de bibliothèque Python pour la consommation publique? Comment dois-je réorganiser ma structure de répertoires, référentiel git, etc. afin de commencer à travailler vers une version publique de la bibliothèque?
Plus généralement, il serait très utile de disposer de ressources reconnues utiles lors de la première tentative. Des conseils sur les meilleures pratiques et les erreurs à éviter, etc., seraient également très utiles.
Quelques précisions: les réponses actuelles répondent à une question du type "comment puis-je faire de ma bibliothèque Python une bonne que les autres puissent utiliser?" C'est utile, mais c'est différent de la question que j'avais l'intention de poser.
Je suis actuellement au début d'un long voyage vers la sortie de mon projet. Le cœur de mon implémentation fonctionne (et fonctionne très bien), mais je me sens dépassé par la quantité de travail qui m'attend et je cherche des conseils sur la façon de naviguer dans le processus. Par exemple:
Mon code de bibliothèque est actuellement couplé à mon propre code propre au domaine qui l'utilise. Il vit dans un sous-dossier et partage le même référentiel git. Finalement, il devra être transformé en une bibliothèque autonome et placé dans son propre référentiel, mais je continue de tergiverser parce que je ne sais pas comment le faire. (Ni comment installer une bibliothèque en «mode développement» pour que je puisse encore la modifier, ni comment garder les deux git repos synchronisés.)
Mes docstrings sont laconiques, car je sais que je devrai éventuellement utiliser Sphinx ou un autre outil. Mais ces outils ne semblent pas simples à apprendre, donc cela devient un sous-projet majeur et je continue de le repousser.
À un moment donné, j'ai besoin d'apprendre à utiliser setuptools ou un autre outil pour l'empaqueter et suivre les dépendances, qui sont assez complexes. Je ne sais pas si je dois le faire maintenant ou non, et la documentation est un labyrinthe absolu pour un nouvel utilisateur, donc je continue de décider de le faire plus tard.
Je n'ai jamais eu à faire de tests systématiques, mais je le ferai certainement pour ce projet, donc je dois (i) en apprendre suffisamment sur les tests pour savoir quelle méthodologie est la bonne pour mon projet; (ii) apprendre quels outils sont disponibles pour ma méthodologie choisie; (iii) apprendre à utiliser l'outil que j'ai choisi; (iv) implémenter des suites de tests, etc. pour mon projet. Ceci est un projet en soi.
Il y a peut-être aussi d'autres choses que je dois faire. Par exemple, jonrsharpe a publié un lien utile qui mentionne git-flow, tox, TravisCI, virtualenv et CookieCutter, dont je n'avais jamais entendu parler auparavant. (Le poste date de 2013, donc je dois aussi faire un peu de travail pour savoir combien est encore en cours.)
Lorsque vous mettez tout cela ensemble, c'est un énorme travail, mais je suis sûr que je peux tout faire si je continue de le brancher, et je ne suis pas pressé. Mon problème est de savoir comment le décomposer en étapes gérables qui peuvent être effectuées une à la fois.
En d'autres termes, je demande quelles sont les étapes concrètes les plus importantes que je peux prendre maintenant, afin d'atteindre un produit libérable à terme. Si j'ai un week-end gratuit, sur quoi dois-je me concentrer? Laquelle (le cas échéant) peut être effectuée indépendamment des autres, afin que je puisse au moins faire une étape sans avoir à tout faire? Quelle est la manière la plus efficace d'apprendre ces choses pour que j'aie encore le temps de me concentrer sur le projet lui-même? (Gardant à l'esprit que tout cela est essentiellement un projet de loisir, pas mon travail.) Y a-t-il quelque chose que je n'ai pas vraiment besoin de faire , me permettant ainsi d'économiser énormément de temps et d'efforts?
Toutes les réponses sont grandement appréciées, mais je serais particulièrement heureux de recevoir des réponses qui se concentrent sur ces aspects de la gestion de projet, avec une référence spécifique au développement Python moderne.