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
Respuestas:
Agregar un archivo setup.py, aunque es necesario, no es el paso más importante si desea que se use su biblioteca. Lo más importante es agregar documentación y anunciar su biblioteca. Dado que el segundo punto depende en gran medida de la biblioteca, permítanme centrarme en el aspecto de la documentación.
Sabes todo sobre tu biblioteca. Y esto es problemático. Ya sabe cómo instalarlo y cómo usarlo, por lo que muchas cosas pueden parecerle intuitivas o simplemente obvias. Desafortunadamente, las mismas cosas pueden no ser obvias ni intuitivas para los usuarios. Intenta mirar tu biblioteca como si no supieras nada al respecto y, lo que es más importante, pide a otras personas que la usen y trata de detectar todas las dificultades que tuvieron.
Explique, en inglés simple, de qué trata su biblioteca. Demasiadas bibliotecas suponen que todos las conocen. Cuando este no es el caso, puede ser difícil comprender cuál es el propósito de la biblioteca.
Escriba documentación técnica detallada, pero también no se olvide de piezas cortas de código que muestran cómo hacer algunas de las tareas con su biblioteca. La mayoría de los desarrolladores tienen prisa, y si necesitan pasar horas tratando de entender cómo hacer algo básico, pueden tender a cambiar a otras bibliotecas.
Incluya su información de contacto. Si su biblioteca es un éxito (y mi propia experiencia ha demostrado que este es el caso incluso para las más bien desconocidas también), las personas encontrarían dificultades con ella: errores o simplemente dificultades para comprender o usar algunas partes de ella. A menudo es útil recibir sus comentarios para mejorar su biblioteca: por cada persona que informó un problema, posiblemente haya cientos de personas que, al encontrarlo, prefieran cambiar a otra biblioteca.
Además de eso:
Deje en claro si su biblioteca funciona con Python 2 o 3 o ambos.
Si la biblioteca no funciona en Windows, dígalo.
Asegúrese de usar convenciones oficiales (use pep8 para verificar). Si no, explíquelo claramente o arréglelo.
Tenga cuidado al manejar casos extremos. Cuando se llama a su biblioteca con un tipo incorrecto o con un valor que no es compatible, debería decir, en inglés simple, qué es exactamente lo que está mal. Lo que no debería hacer es elevar una excepción críptica diez niveles más abajo y dejar que el usuario descubra qué salió mal.
fuente
How can I tell which one I should invest in learning for my project?
- tu no. Pasas un poco de tiempo eligiendo uno que parezca razonable y sigue adelante. Como desarrollador de JavaScript donde tiene 40 opciones para cada decisión, prometo que esta es la decisión correcta :)Después de haber utilizado algunas bibliotecas menos que maduras a lo largo de los años, un consejo clave es que, una vez que haya elegido su herramienta de implementación, haga lo siguiente: ¿Su biblioteca hace algo realmente útil para construir una comunidad?
Identifica las dependencias de tu biblioteca.
Intente una implementación en un entorno limpio, ya sea un contenedor de expediente o VM. Considero que este paso es crucial, ya que a menudo hay algo único en un entorno personal que causa problemas.
Considere quién va a mantener la biblioteca en el futuro, no hay nada más frustrante que encontrarse con una biblioteca que fue el proyecto favorito de alguien durante tres o cuatro años y luego no recibe las actualizaciones necesarias para mantenerla actualizada.
Considere si usted o su equipo desean comprometerse a mantener la biblioteca probada y documentada (las pruebas unitarias y las canalizaciones de CI comienzan a formar parte de la ecuación aquí).
fuente
¿Quizás podría encontrar un proyecto OSS maduro en su campo y contribuir con su código a ese proyecto? Podría haber algunas ventajas, como:
Si hay un proyecto de OSS relevante que le gusta y puede usar, ¿por qué no abrir un problema o una solicitud de extracción o ponerse en contacto con los encargados de mantenimiento? (Una buena forma de comenzar podría ser resolver un problema existente).
fuente
Es 2019, sugiero comenzar con las herramientas más modernas. No necesita un
setup.py
, eso es algo de lo que la gente de la comunidad de Python quiere deshacerse, y creo que eventualmente lo harán.Prueba Poesía , no te arrepentirás.
fuente
Esta es una pregunta complicada que está haciendo, y estoy completamente de acuerdo con la respuesta de Arseni . La buena documentación es un aspecto muy importante. Si no logro poner en funcionamiento su biblioteca con unos simples pasos, simplemente la dejaré allí (a menos que esté realmente ansioso por probarla).
Algunas cosas que definitivamente consideras
No tengo experiencia relevante con Python, por lo que no puedo darle ninguna pista en esa dirección. Sin embargo, es posible automatizar todas las pruebas activadas por cada confirmación en su repositorio remoto (es decir, utilizando Jenkins ). Sin embargo, sugiero posponer esto, porque es mucho trabajo configurarlo sin experiencia previa.
fuente
Estas son buenas preguntas.
Acerca de pasos incrementales concretos importantes hacia una biblioteca liberable:
../library
hasta llegar a los pasos del modo de desarrollo y empaquetado de pip.pytest
. Mucho antes de realizar un lanzamiento, las pruebas unitarias darán resultado en su propio desarrollo al encontrar errores en los casos de esquina y proporcionar confianza de que los cambios en el código no estropearon las cosas. De nuevo, puedes construir esto con el tiempo. Es bastante fácil comenzar.README.md
archivos de documentación en el nivel superior y en cualquier directorio, y con un archivo de licencia.fuente