¿Cómo empaqueto una aplicación de Python para que se pueda instalar en pip?

95

Estoy escribiendo una aplicación de Django en mi tiempo libre para una competencia de propinas que estamos llevando a cabo en el trabajo. Pensé que usaría este tiempo sabiamente y me pondría al día con virtualenv, pip, packaging, django 1.3 y cómo escribir una aplicación fácilmente redistribuible. Hasta aquí todo bien.

Estoy a la altura de la parte del embalaje. Muchas de las aplicaciones de django en GitHub, por ejemplo, están empaquetadas (aproximadamente) de la misma manera. Voy a usar django-UNI-formas como un ejemplo.

Una suposición que estoy haciendo es que MANIFEST.iny setup.pyson 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 empaque requeridos se generan generalmente o están hechos a mano? ¿Se pueden describir las dependencias y luego instalarlas también? Mi aplicación depende de django-uni-forms, y la tengo listada en un requirements.txtarchivo dentro de mi aplicación que usé para instalar la dependencia; pero ¿es eso algo de lo que el sistema de envasado puede encargarse?

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

Josh Smeaton
fuente

Respuestas:

88

Si MANIFEST.inysetup.py debería ser suficiente.

Esta publicación de blog realmente tiene buena información sobre este tema: Empaquetar una aplicación reutilizable 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 podría no ser obvio al principio.

Y sí, puede especificar los paquetes requeridos en su setup.pyque se obtienen 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 debería poder instalarse a través de pip.


Como señaló Pierre 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 descripción general sobre el empaquetado y la carga de un paquete en PyPI: Compartiendo su labor de amor: PyPI rápido y sucio

arie
fuente
4
También ahora hay una parte que explica cómo empaquetar una aplicación Django en los documentos oficiales
Pierre de LESPINAY