Como faço para empacotar um aplicativo Python para torná-lo instalável no pip?

95

Estou escrevendo um aplicativo de django em meu tempo livre para uma competição de derrubada de futebol que estamos realizando no trabalho. Achei que deveria usar esse tempo com sabedoria e me atualizar sobre virtualenv, pip, packaging, django 1.3 e como escrever um aplicativo facilmente redistribuível. Por enquanto, tudo bem.

Estou preparado para a parte de embalagem. Muitos dos aplicativos django no GitHub, por exemplo, são agrupados (aproximadamente) da mesma maneira. Vou usar django-uni-forms como exemplo.

Uma suposição que estou fazendo é que MANIFEST.ine setup.pysão as únicas peças necessárias que o pip precisa para fazer seu trabalho. Isso é correto? Que outros componentes são necessários se minha suposição estiver errada?

Os arquivos de empacotamento necessários geralmente são gerados ou são feitos à mão? As dependências podem ser descritas e depois instaladas também? Meu aplicativo depende de django-uni-forms, e eu o tenho listado em um requirements.txtarquivo dentro do meu aplicativo que usei para instalar a dependência; mas isso é algo que o sistema de embalagem pode cuidar?

Quais são as etapas que preciso seguir para empacotar meu aplicativo de forma que o pip seja capaz de instalá-lo e de quaisquer dependências?

Josh Smeaton
fonte

Respostas:

88

Sim, MANIFEST.ine setup.pydeve ser suficiente.

Esta postagem de blog realmente contém algumas boas informações sobre este tópico: Empacotando um aplicativo Django reutilizável

E aqui está outra boa visão geral detalhada que me ajudou muito: Python Packaging User Guide

Especialmente as dicas para incluir seus arquivos estáticos (modelos) são importantes, pois isso pode não ser óbvio a princípio.

E sim, você pode especificar os pacotes necessários em seu, setup.pyque são buscados automaticamente ao instalar seu aplicativo.

Por exemplo:

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

Obviamente, agora temos dois lugares onde as dependências são definidas, mas isso não significa necessariamente que essas informações sejam duplicadas: setup.py vs requirements.txt

Com esta configuração, seu pacote deve ser instalável via pip.


Como Pierre observou nos comentários, agora há também uma seção relevante na documentação oficial do Django: Empacotando seu aplicativo

E depois há este guia "completamente incompleto", que realmente oferece uma ótima visão geral sobre como empacotar e fazer upload de um pacote para PyPI: Compartilhando seu trabalho de amor: PyPI rápido e sujo

arie
fonte
4
Também há agora uma parte explicando como empacotar um aplicativo Django nos documentos oficiais
Pierre de LESPINAY