Soy un académico más que un programador, y tengo muchos años de experiencia escribiendo programas de Python para mi propio uso, para apoyar mi investigación. Es probable que mi último proyecto sea útil para muchos otros y para mí, y estoy pensando en lanzarlo como una biblioteca Python de código abierto.
Sin embargo, parece que hay muchos obstáculos para pasar de un proyecto personal en funcionamiento a una biblioteca que otros puedan instalar y usar sin problemas. Esta pregunta es sobre los primeros pasos que debo tomar para comenzar a trabajar hacia un lanzamiento público.
Actualmente, tengo un único repositorio de git que contiene mi código que usa la biblioteca y la biblioteca en sí, y uso git como un botón de deshacer de emergencia en caso de que algo se rompa. Todo esto funciona bien para un solo usuario, pero obviamente no es apropiado si quiero liberarlo. Donde quiero terminar es que mi biblioteca está en un repositorio separado y que otros pueden instalarla pip
, y tiene una API estable.
Aprender a usar setuptools, etc., probablemente no sea tan difícil una vez que esté a punto de querer publicarlo; mi problema es saber cómo debería estar trabajando para llegar a ese punto.
Entonces, mi pregunta es, ¿cuáles son los primeros pasos que uno debe tomar para comenzar a preparar un proyecto de biblioteca Python para el consumo público? ¿Cómo debo reorganizar la estructura de mi directorio, el repositorio de git, etc. para comenzar a trabajar en una versión pública de la biblioteca?
En términos más generales, sería muy útil si hay recursos que se sabe que son útiles al intentar esto por primera vez. Los consejos sobre las mejores prácticas y los errores a evitar, etc., también serían muy útiles.
Algunas aclaraciones: las respuestas actuales abordan una pregunta en la línea de "¿cómo puedo hacer que mi biblioteca de Python sea buena para que otros la usen?" Esto es útil, pero es diferente de la pregunta que pretendía hacer.
Actualmente estoy al comienzo de un largo viaje hacia el lanzamiento de mi proyecto. El núcleo de mi implementación funciona (y funciona muy bien), pero me siento abrumado por la cantidad de trabajo que tengo por delante y estoy buscando orientación sobre cómo navegar por el proceso. Por ejemplo:
Mi código de biblioteca está actualmente acoplado a mi propio código específico de dominio que lo usa. Vive en una subcarpeta y comparte el mismo repositorio git. Eventualmente, tendrá que convertirse en una biblioteca independiente y colocarse en su propio repositorio, pero sigo postergando esto porque no sé cómo hacerlo. (Ni cómo instalar una biblioteca en 'modo de desarrollo' para que aún pueda editarla, ni cómo mantener sincronizados los dos repositorios de git).
Mis cadenas de documentos son concisas, porque sé que eventualmente tendré que usar Sphinx o alguna otra herramienta. Pero estas herramientas no parecen ser fáciles de aprender, por lo que se convierte en un subproyecto importante y sigo posponiéndolo.
En algún momento necesito aprender a usar setuptools o alguna otra herramienta para empaquetarlo y rastrear las dependencias, que son bastante complejas. No estoy seguro de si necesito hacer esto ahora o no, y la documentación es un laberinto absoluto para un nuevo usuario, así que sigo decidiendo hacerlo más tarde.
Nunca he tenido que hacer pruebas sistemáticas, pero definitivamente lo haré para este proyecto, así que tengo que (i) aprender lo suficiente sobre las pruebas para saber qué metodología es la adecuada para mi proyecto; (ii) aprender qué herramientas están disponibles para mi metodología elegida; (iii) aprender a usar mi herramienta elegida; (iv) implementar conjuntos de pruebas, etc. para mi proyecto. Este es un proyecto en sí mismo.
Puede que haya otras cosas que tengo que hacer también. Por ejemplo, jonrsharpe publicó un enlace útil que menciona git-flow, tox, TravisCI, virtualenv y CookieCutter, ninguno de los cuales había escuchado antes. (La publicación es de 2013, por lo que también tengo que hacer un trabajo para averiguar cuánto sigue vigente).
Cuando juntas todo esto, es una gran cantidad de trabajo, pero estoy seguro de que puedo hacerlo todo si sigo enchufándolo, y no tengo prisa. Mi problema es saber cómo dividirlo en pasos manejables que se pueden hacer uno a la vez.
En otras palabras, estoy preguntando cuáles son los pasos concretos más importantes que puedo tomar ahora, para llegar a un producto liberable eventualmente. Si tengo un fin de semana gratis, ¿en cuáles de estas cosas debería centrarme? ¿Qué (si hay) se puede hacer de forma aislada de los demás, para que al menos pueda dar un paso sin necesidad de hacer todo? ¿Cuál es la forma más eficiente de aprender estas cosas para que aún tenga tiempo de concentrarme en el proyecto en sí? (Teniendo en cuenta que todo esto es esencialmente un proyecto de pasatiempo, no mi trabajo). ¿Hay algo que realmente no necesite hacer , ahorrándome una gran cantidad de tiempo y esfuerzo?
Todas las respuestas son muy apreciadas, pero agradecería especialmente las respuestas que se centran en estos aspectos de gestión de proyectos, con referencia específica al desarrollo moderno de Python.
fuente