Você está aqui: Página Inicial Documentação Crie novos pacotes rapidamente com o paster

Crie novos pacotes rapidamente com o paster

por Ramiro B. da Luz última modificação 13/11/2011 09:56
Como usar o comando paster para criar novos pacotes, cujos layouts no sistema de arquivos são compatíveis com eggs e setuptools, de maneira rápida e fácil.

Crie novos pacotes rapidamente com o paster

Como usar o comando paster para criar novos pacotes, cujos layouts no sistema de arquivos são compatíveis com eggs e setuptools, de maneira rápida e fácil.

No Zope 2.10 (ou Zope 2.9 se você usar pythonproducts), você pode criar produtos Zope 2 que se instalam em seu $PYTHONPATH na forma de pacotes bem ordenados, em vez de utilizar o namespace plano do diretório Products/.

Tanto o Zope como o Plone estão firmemente se movendo em direção a uma maior dependência de "eggs" Python, distribuições autônomas de código e extensões que podem gerenciar suas dependências automaticamente, além de conter metadados úteis. Para ter esse suporte no seu próprio códigio, é necessário fornecer algum boilerplate (código repetitivo, clichê).

Para facilitar a criação desse boilerplate, você pode usar o ZopeSkel, um conjunto de templates doo PasteScript para o comando paster que geramboilerplate comum para o Plone.

 

Configuração

Para instalar o ZopeSkel, primeiramente você precisa ter o easy_install em seu sistema. Se não tem, baixe e execute o ez_setup.py. Exemplo:

$ wget peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py

Então, para instalar o pacote ZopeSkel e suas dependências (incluindo o PasteScript), execute:

$ easy_install -U ZopeSkel

Isso irá instalar o comando paster no mesmo diretório do binário do Python. Fique de olho na saída do easy_install para conseguir encontrá-lo depois. Se o diretório não estiver em sua variável de ambiente $PATH, você provavelmente desejará definir um link simbólico para tal binário lá.

 

Criação de novos pacotes

Agora você será capaz de criar uma variedade de tipos de pacotes. Execute:

  $ paster create --list-templates
    Available templates:  basic_namespace:   A project with a namespace package
     basic_package:     A basic setuptools-enabled package
     nested_namespace:  A project with two nested namespaces.
     paste_deploy:      A web application deployed through paste.deploy
     plone:             A Plone project
     plone2_theme:      A Theme for Plone 2.1 & Plone 2.5
     plone3_theme:      A Theme for Plone 3
     plone_app:         A Plone App project

Para criar um pacote padrão de "nível único", execute:

$ paster create -t plone

Respondas às perguntas e você vai obter um novo diretório com o boilerplate necessário, além de alguns metadados. Da mesma forma, para um pacote de "dois níveis", como plone.app.something, (você não é obrigado a usar "plone" ou "app" é claro), você pode fazer:

$ paster create -t plone_app

Ou, se você quiser um novo tema, tente:

$ paster create -t plone3_theme

 

Adicione pacotes a uma instância

Você pode usar o setup.py do pacote recém-criado para instalar o seu pacote, criar e mesmo publicar pacotes no Cheeseshop ou coisas parecidas. Consulte a documentação do setuptools para obter mais detalhes.

Para aprender sobre essa forma de trabalhar, veja o tutorial do buildout.

 

Permita ao Zope encontrar os seus pacotes

Durante sua inicialização, o Zope lê o diretório Products/ em busca de produtos para registrar. O mesmo não ocorre com produtos e pacotes fora do diretório Products/ (o rastreamento de todo o $PYTHONPATH provavelmente não seria uma boa idéia).

Se você está criando um simples pacote Python que deseja usar a partir de algum outro pacote ou produto, você não precisa fazer nada. Ele deverá ser encontrado em tempo d execução.

Se você precisa de um produto (ou seja, se você respondeu "Yes" quando o paster perguntou "Is this a Zope 2 product?" - "Será este um produto Zope 2?") ou se você precisa carregar arquivos .zcml do Zope 3 durante a inicialização do Zope, você tem as seguintes opções:

  • Coloque um slug em INSTANCE_HOME/etc/package-includes, com um nome como my.package-configure.zcml. Esse arquivo deve conter uma única linha: <include package="my.package" />. Isso fará com que o Zope encontre o pacote my.package dentro de seu $PYTHONPATH e execute o seu configure.zcml.
  • Coloque uma instrução <include package="my.package" /> em um configure.zcml de qualquer produto encontrado em Products/. O Five garante que todos os arquivos .zcml de todos os produtos em Products/ sejam carregados automaticamente, e assim, por estar incluído, seu pacote será carregado também.
  • Coloque uma instrução <include package"my.package" /> em etc/site.zcml, que também é lido durante a inicialização.

Para mais detalhes como gerenciar isso com zc.buildout, consulte o tutorial buildout.