Distribuindo Seu Programa com Distutils
distutils é uma alternativa ao complicado make, com ele você pode criar roteiros de compilação, criação de pacotes, tanto windows (.zip e .exe) quanto unix (.tar.bz2, .tar.gz, .rpm), tudo isso com sua linguagem preferida
http://www.python.org/doc/current/dist/
Tudo o que você precisa é de um arquivo setup.py que importe os módulos do distutils, acerte os parâmetros e depois chame a função setup() com estes parâmetros.
Um exemplo para um pacote que contenha dois arquivos python hello.py e world.py:
Você poderá, então:
Criar um pacote com código fonte: python setup.py sdist
Criar um pacote binário RPM: python setup.py bdist_rpm
Criar um pacote com instalador do Windows: python setup.py bdist_wininst
Instalar um pacote: python setup.py install
OBS: Para mais informações sobre comandos e opções dos comandos, vide python setup.py --help e python setup.py --help-commands. OBS: Existem mais parâmetros a serem passados, dentre eles o data_files, veja exemplo em TraduzindoSeuPrograma.
Utilizando um Pacote
Se você possui um pacote, isto é, um diretório com um arquivo __init__.py e os vários módulos dentro, você pode utilizar-se destes ao especificar os parâmetros do setup().
Vamos considerar que seu pacote é meupacote.
Caso 1: meupacote está dentro de lib
Se você gosta de organizar seu código de forma que sua estrutura de diretórios contenha:
./: diretório base
./lib: diretório com código
./lib/meupacote: seu pacote
Você deverá usar:
Caso 2: meupacote é o lib
Se você gosta de organizar seu código de forma que sua estrutura de diretórios contenha:
./: diretório base
./lib: seu pacote
Você deverá usar:
Instalando Scripts
Até agora vimos como instalar módulos e pacotes python, mas como instalar scripts que serão usados diretamente pelo usuário? Você usa o parâmetro scripts}} e uma lista de scripts, os quais deverão ser código fonte em python e começar com a linha {{{#!/.../python, o distutils irá alterar esta linha para o caminho correto do interpretador python da máquina.
Um exemplo, para um script helloworld (note, sem o .py!):
sdist e MANIFEST.in
Ao criar um pacote fonte o distutils procura por um arquivo MANIFEST, o qual contém os arquivos a serem inclusos no pacote, caso este não exista um é criado a partir de um MANIFEST.in (caso este exista). Se nenhum destes existir, crie um com os arquivos básicos.
Portanto, se você quiser incluir alguns arquivos com o pacote fonte, como os arquivos de template e fonte de tradução do gettext, arquivos auxiliares, caso de teste, etc, coloque-os em MANIFEST.
Outros recursos
O distutils pode registrar o seu programa no PyPI (Python Package Index), para isso você deve usar o parâmetro classifiers com os dados necessários, vide http://www.python.org/doc/current/dist/setup-script.html