¿Cómo empaquetar una aplicación de python para que sea instalable por pip?

Estoy escribiendo una aplicación django en mi tiempo libre para una competencia de footy tip que estamos ejecutando en el trabajo. Pensé que usaría este tiempo de manera inteligente y me pondría al día en virtualenv, pip, packaging, django 1.3 y cómo escribir una aplicación fácilmente redistribuible. Hasta ahora tan bueno.

Estoy a la altura del empaque. Muchas de las aplicaciones de Django en GitHub, por ejemplo, están en su mayoría agrupadas (aproximadamente) de la misma manera. Usaré django-uni-forms como ejemplo.

Un supuesto que estoy haciendo es que MANIFEST.in y setup.py son las únicas piezas necesarias que pip necesita para hacer su trabajo. ¿Es eso correcto? ¿Qué otros componentes son necesarios si mi suposición es incorrecta?

¿Los archivos de empaquetado requeridos generalmente se generan, o están hechos a mano? ¿Se pueden describir y luego instalar las dependencias? Mi aplicación depende de django-uni-forms , y la tengo incluida en un archivo Requirements.txt dentro de mi aplicación que utilicé para instalar la dependencia; ¿Pero es eso algo de lo que el sistema de empaque puede hacerse cargo?

¿Cuáles son los pasos que debo seguir para empaquetar mi aplicación de tal manera que pip pueda instalarla y cualquier dependencia?

Sí, MANIFEST.in y setup.py deberían ser suficientes.

Esta publicación de blog realmente tiene buena información sobre este tema: Empaquetar una aplicación reutilizable de Django

Y aquí hay otra descripción general buena y detallada que me ayudó mucho: Guía del usuario de Python Packaging

Especialmente los consejos para incluir sus archivos estáticos (plantillas) son importantes, ya que esto puede no ser obvio al principio.

Y sí, puede especificar los paquetes requeridos en su setup.py que se recuperan automáticamente al instalar su aplicación.

Por ejemplo:

  install_requires = [ 'django-profiles', 'django-uni-forms', ], 

Obviamente, ahora tenemos dos lugares donde se definen las dependencias, pero eso no significa necesariamente que esta información esté duplicada: setup.py vs Requirements.txt

Con esta configuración, su paquete debe ser instalable a través de pip .


Como Pierre señaló en los comentarios, ahora también hay una sección relevante en la documentación oficial de Django: Empaquetar su aplicación

Y luego está esta guía “completamente incompleta”, que realmente brinda una excelente visión general sobre el empaquetado y la carga de un paquete en PyPI: Compartiendo tu labor de amor: PyPI rápido y sucio