associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

DistUtils

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:

   1 from distutils.core import setup
   2 setup( name="helloworld", version="1.0", py_modules=[ "hello", "world" ],
   3        author="Gustavo Sverzut Barbieri", author_email="barbieri@gmail.com" )

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:

   1 from distutils.core import setup
   2 setup( name="helloworld", version="1.0", 
   3        author="Gustavo Sverzut Barbieri", author_email="barbieri@gmail.com",
   4        packages=[ "meupacote" ], package_dir={ "": "lib" }
   5      )

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:

   1 from distutils.core import setup
   2 setup( name="helloworld", version="1.0", 
   3        author="Gustavo Sverzut Barbieri", author_email="barbieri@gmail.com",
   4        packages=[ "meupacote" ], package_dir={ "meupacote": "lib" }
   5      )

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!):

   1 from distutils.core import setup
   2 setup( name="helloworld", version="1.0", py_modules=[ "hello", "world" ],
   3        author="Gustavo Sverzut Barbieri", author_email="barbieri@gmail.com",
   4        scripts=[ "helloworld" ] )

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