modules all python pip setuptools distutils distribute

all - setuptools python



¿Cuáles son los casos de uso para una distribución de Python? (1)

Estoy desarrollando una distribución para el paquete de Python que estoy escribiendo para poder publicarlo en PyPI. Es la primera vez que trabajo con distutils, setuptools, distributed, pip, setup.py y todo eso y estoy luchando un poco con una curva de aprendizaje bastante más empinada de lo que esperaba :)

Estaba teniendo problemas para conseguir que algunos de mis archivos de datos de prueba se incluyeran en el tarball al especificarlos en el parámetro data_files en setup.py hasta que encontré una publicación diferente aquí que me indicó el archivo MANIFEST.in . Justo en ese momento me salté a la idea de que lo que incluyes en el tarball / zip (usando MANIFEST.in) y lo que se instala en el entorno de Python de un usuario cuando lo hacen es easy_install o lo que sea (basado en lo que especifiques en setup.py ) son dos cosas muy diferentes; en general, hay mucho más en el tarball de lo que realmente se instala.

Esto provocó inmediatamente un olor de código para mí y la comprensión de que debe haber más de un caso de uso para una distribución; Estaba obsesionado con el único en el que realmente participé, usando easy_install o pip para instalar una biblioteca. Y luego me di cuenta de que estaba desarrollando un producto de trabajo donde solo tenía una comprensión parcial de los usuarios finales para los que estaba desarrollando.

Así que mi pregunta es esta: "¿Cuáles son los casos de uso para una distribución de Python que no sea la instalación en el entorno de Python de uno? ¿A quién más estoy sirviendo con esta distribución y qué es lo que más les importa?"

Estos son algunos de los problemas de trabajo que aún no he descubierto que responden a la respuesta:

  • ¿Es sensato incluir todo lo que está bajo control de fuente (git) en la distribución fuente? En la era de github, ¿alguien descarga una distribución de fuente para tener acceso a la fuente completa del proyecto? ¿O debería simplemente publicar un enlace a mi repositorio github? ¿No incluirá todo lo que aumenta la distribución y hace que tarde más tiempo en descargarse para las personas que solo quieren instalarlo?

  • Voy a alojar la documentación en readthedocs.org. ¿Tiene algún sentido para mí incluir versiones HTML de los documentos en la distribución fuente?

  • ¿Alguien usa la python setup.py test para ejecutar pruebas en una distribución de origen? Si es así, ¿en qué papel están y en qué situación se encuentran? No sé si debería molestarme en hacer ese trabajo y, si lo hago, para quién hacerlo funcionar.


Algunas cosas que quizás desee incluir en la distribución de origen pero que tal vez no instale incluyen:

  • la licencia del paquete
  • un conjunto de prueba
  • la documentación (posiblemente una forma procesada como HTML además de la fuente)
  • posiblemente cualquier script adicional usado para construir la distribución fuente

Muy a menudo esto será la mayoría o la totalidad de lo que está administrando en el control de versiones y posiblemente algunos archivos generados.

La razón principal por la que haría esto cuando esos archivos están disponibles en línea o mediante el control de versiones es para que las personas sepan que tienen la versión de los documentos o las pruebas que coinciden con el código que están ejecutando.

Si solo aloja la versión más reciente de los documentos en línea, es posible que no sea útil para alguien que deba usar una versión anterior por alguna razón. Y el conjunto de pruebas en la punta en el control de versiones puede no ser compatible con la versión del código en la distribución fuente (por ejemplo, si prueba funciones agregadas desde entonces). Para obtener la versión correcta de los documentos o las pruebas, tendrían que pasar el control de versión buscando una etiqueta que corresponda a la distribución fuente (suponiendo que los desarrolladores se molestaron en etiquetar el árbol). Tener los archivos disponibles en la distribución fuente evita este problema.

En cuanto a las personas que desean ejecutar el conjunto de pruebas, tengo varios de mis módulos de Python empaquetados en varias distribuciones de Linux y ocasionalmente obtengo informes de errores relacionados con fallas de prueba en sus entornos. También utilicé las suites de prueba de los módulos de otras personas cuando encuentro un error y quiero verificar si el código externo se está comportando como espera el autor en mi entorno.