Pergunta

Estou começando um projeto pequeno / médio porte python, provavelmente no Test Driven Development. Minhas origens são mais em C e Java do que python (eu usei formiga e makefile)

Eu sei que em python que você pode não precisar de uma ferramenta de construção, mas eu vou, porque eu vou usar Cython e PyInstaller (a coisa deve funcionar em um par de diferentes UNIXes, sem depender diretamente sobre python) e eu como a conveniência de escolher os testes formar CLI, construindo os docs, talvez verificar dependências, etc.

Alguém está reclamando que python carece de um make-como ferramenta. Eu sei que existem algumas ferramentas, como scon e paver , mas eu gostaria de ouvir de usuários reais e não apenas o seu site. Usa ninguém paver ?

O que é sobre o setup.py habitual que vem com muitos pacotes? Eu olhei para um pouco para ver se há um uso comum, mas não encontrou nada de interessante (talvez eu usei os exemplos errados)

Você recomendo ficar com coisas que eu já sei (formiga e Makefile) pelo menos para começar? Se assim for, há qualquer extensão formiga você recomendaria para python (+ Cython + pyinstaller + PyUnit)?


EDIT: para evitar mais respostas como um de JWP, nota que, para este projeto, eu absolutamente necessário meu programa ser um executável autônomo porque é absolutamente impossível ter um python VM na plataforma de destino onde o executável será executado. Eu tenho exatamente o mesmo HW disponível para compilar, então luckly I não precisam cross-compilação (mas eu faria o desenvolvimento em Linux mais amigável).

Eu também gostaria de testar se minha compilação de código em Cython desde o início, não para otimizar prematura, mas só para ter certeza que eu não estou indo longe demais com o uso de recursos incompatíveis, o que exigiria uma dolorosa refatoração se Cython seria seriamente necessário.

Então, por favor foco sobre a minha pergunta real

Foi útil?

Solução

Os requisitos de sugerir em vez Scons que, de acordo com seu site, tem mais controle sobre grande variedade de tarefas de construção que Paver . Neste último você iria acabar com um monte de sh() que executa um programa de linha de comando regular.

Recentemente, eu comecei a usar Paver que é realmente grande para executar testes, documentações de construção com Esfinge , mas use apenas pura Python. Se você quiser ver o que é possível com Paver Eu recomendo esses 2 artigos: convertendo-de-make-to-paver escrevendo-técnico documentação por Doug Hellmann e você definitivamente querer verificar sua pavement.py arquivo de configuração .

Outras dicas

Se for possível, eu sugiro evitando módulos de extensão (C / Cython) no início . Obtenha seu todo o código escrito em Python, usar um distutils configuração baseada simples, executar os testes usando -m (python -m mypkg.test.testall, ou qualquer que seja, importação unittest ).

Depois de conseguir o seu projeto para um estado confortável, em seguida, começar a lidar com algumas otimizações com Cython eo gerenciamento de projetos extra que vem com isso. distutils pode construir módulos de extensão, então eu não tenho certeza que você vai precisar fazer / scons ..

 project-dir/
  setup.py
  mypkg/
   __init__.py
   mymod.py
   test/
    __init__.py
    testall.py
    testsomething_specific.py

Eu tenho usado setuptools para isso, às vezes em combinação com Ant para mais complexa coisas, ou para a integração com outras compilações. Em geral, tem funcionado bem para mim, mas eu já ouvi algumas pessoas em #python (Freenode) reclamar uma geralmente baixa qualidade fonte para este pacote, e recomendar o padrão distutils .

Uma coisa que realmente cuidado com se você são utilizados para Java (como eu), é que python não suporta pacotes de divisão. Ou seja, você não pode colocar site.db em src / site / db, site.view em src2 / site / vista, colocar src e src2 em PYTHONPATH e tudo ao trabalho de esperar. Isso causou grandes dores de cabeça para mim com as ferramentas de compilação, ele trabalhou um pouco esporadicamente:)

Uma ferramenta que eu amor é virtualenv: http://pypi.python.org/pypi/virtualenv

a partir do site: O que ele faz virtualenv é uma ferramenta para criar ambientes Python isolados. O problema básico a ser abordado é uma das dependências e versões, e indiretamente permissões. Imagine que você tem um aplicativo que precisa versão 1 do libfoo, mas outro aplicativo requer a versão 2. Como você pode usar tanto estas aplicações? Se você instalar tudo em /usr/lib/python2.4/site-packages (ou qualquer outro local padrão de sua plataforma é), é fácil acabar em uma situação onde você acidentalmente atualizar um aplicativo que não deve ser atualizado.

Você também pode tentar: http://pypi.python.org/pypi/zc. buildout

a partir do site: O projeto buildout fornece suporte para a criação de aplicativos, especialmente aplicativos Python. Ele fornece ferramentas para a montagem de aplicações de múltiplas partes, Python ou de outra forma. Um aplicativo pode realmente conter vários programas, processos e definições de configuração.

Tentou fazê-lo um par de vezes, excelente para implantar envrionments de desenvolvimento, talvez seja demais para suas necessidades.

Eu também foi dito e lido em um par de lugares que o nariz é uma ferramenta muito legal teste http://somethingaboutorange.com/mrl/projects/nose/0.11.1/ , eu estou procurando algum tempo livre para experimentá-lo.

Espero que ajude Felicidades, Ale

para evitar mais respostas como um de JWP, nota que, para este projeto, eu absolutamente necessário meu programa ser um executável autônomo porque é absolutamente impossível ter um python VM na plataforma de destino onde o executável será executado. Eu tenho exatamente o mesmo HW disponível para compilar, então luckly I não precisam cross-compilação (mas eu faria o desenvolvimento em Linux mais amigável).

Eu também gostaria de testar se minha compilação de código em Cython desde o início, não para otimizar prematura, mas só para ter certeza que eu não estou indo longe demais com o uso de recursos incompatíveis, o que exigiria uma dolorosa refatoração se Cython seria seriamente necessário.

Se tudo que você está procurando ter um executável autônomo, você não precisa executar Cython. Existem algumas boas bibliotecas para fazer isso:

No entanto, para executar código Python, você simplesmente vai Have a instalar um intérprete ou máquina virtual na máquina de destino, de alguma forma ou de moda. As soluções I apresentados envolvem apenas incorporar o intérprete para torná-lo mais fácil de instalar. Na verdade, eu tenho certeza (mas posso estar errado) que Cython não vai permitir que você construa uma executáveis ??stand-alone. É destinado principalmente para a criação de extensões para o interpretador Python.

No entanto, há um par de outras alternativas. Se você tem um interpretador Java na máquina de destino, você pode executar Jython . Há também um IronPython é para .net. No entanto, você ainda terá de distribuir os tempos de execução para línguas com seu projeto.

Em suma, se você quiser um executável stand-alone sem dependências, sua única opção é muito bonito para ir com C em linha reta ou C ++.

Se você está procurando uma ferramenta de construção baseada simples python. Confira pynt . Tarefas em pynt são apenas função (decorado) python. Ele também suporta parâmetro de estilo Rake passando a tarefas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top