Pergunta

Eu vi um bom bocado de setuptools que bashing nas internets recentemente. Mais recentemente, li de James Bennett na embalagem post sobre isso ninguém deve estar usando setuptools. Do meu tempo em #python na Freenode, eu sei que há algumas almas há que absolutamente detestam. Eu me incluo entre eles, mas eu realmente usá-lo.

Eu usei setuptools para projetos suficientes para estar ciente de suas deficiências, e eu preferiria algo melhor. Eu particularmente não gosto do formato de ovo e como ele é implementado. Com todos os problemas dos setuptools, eu não encontrei uma alternativa melhor.

O meu entendimento de ferramentas como pip é que ele está destinado a ser um substituto easy_install (não setuptools). Na verdade, pip usa alguns componentes setuptools, certo?

A maioria dos meus pacotes de fazer uso de um setup.py setuptools de reconhecimento, que declara todas as dependências. Quando estiver pronto, eu vou construir um sdist, bdist e bdist_egg, e enviá-los para pypi.

Se eu quisesse passar a usar pip, que tipo de mudanças que eu preciso fazer para me livrar de easy_install dependências? Onde estão as dependências declarada? Eu estou supondo que eu precisaria para se afastar de usar o formato de ovo, e fornecer distribuições fonte apenas. Se assim for, como faço para gerar os ovos info-diretórios? ou eu mesmo preciso?

Como é que esta mudança meu uso de virtualenv? Não virtualenv usar easy_install para gerenciar os ambientes?

comando como isso mudaria meu uso dos setuptools fornecido "desenvolver"? Eu não deveria usar isso? Qual é a alternativa?

Estou basicamente tentando obter uma imagem do que o meu desenvolvimento de fluxo de trabalho será semelhante.

Antes que alguém sugere que ele, eu não estou procurando uma solução dependente do sistema operacional. Estou preocupado principalmente com Debian Linux, mas os pacotes deb não são uma opção, pelas razões Ian Bicking contornos aqui .

Foi útil?

Solução

pip usa Setuptools, e não exige quaisquer alterações para os pacotes. É realmente instala pacotes com Setuptools, usando:

python -c 'import setuptools; __file__="setup.py"; execfile(__file__)' \
    install \
    --single-version-externally-managed

Porque ele usa essa opção (--single-version-externally-managed) que não é nunca instalar ovos, como arquivos zip, não suporta múltiplas versões instaladas simultaneamente de software, e os pacotes são instalados plana (como python setup.py install funciona se você usar apenas distutils). metadados ovo ainda está instalado. pip também, como easy_install, downloads e instala todos os requisitos de um pacote.

Além você também pode usar um arquivo de requisitos para adicionar outros pacotes que devem ser instalados em um lote, e fazer exigências versão mais exata (sem colocar essas necessidades exatas em seus arquivos setup.py). Mas se você não fizer arquivos requisitos, então você usá-lo apenas como easy_install.

Para sua install_requires Eu não recomendo quaisquer alterações, a menos que você tenha sido tentando criar requisitos muito exactos lá que são conhecidos por ser bom. Eu acho que há um limite para o exato que você pode ser útil em arquivos setup.py sobre versões, porque você não pode realmente saber o que a compatibilidade futura de novas bibliotecas serão como, e eu não recomendo que você tentar prever isso. arquivos de requisitos são um lugar alternativo para colocar para fora requisitos versão conservadora.

Você ainda pode usar python setup.py develop e, de fato, se você fizer pip install -e svn+http://mysite/svn/Project/trunk#egg=Project ele vai verificar isso (em src/project) e setup.py develop rodar nele. De modo que o fluxo de trabalho não é diferente realmente.

Se você executar pip verbosely (como pip install -vv) você vai ver um monte de comandos que são executados, e você provavelmente vai reconhecer a maioria deles.

Outras dicas

Eu estou escrevendo isso em abril de 2014. Seja consciente da data em nada escrito sobre Python embalagem, distribuição ou instalação. Parece que houve alguma diminuição do facciosismo, a melhoria nas implementações, PEP-padronizar e unificar frentes nos últimos, digamos, três anos.

Por exemplo, o Python Embalagem Autoridade é "um grupo de trabalho que mantém muitos dos projectos relevantes em embalagens Python."

Guia

O python.org Python Embalagem usuário tem Recomendações Ferramenta e O Futuro do Python Embalagem seções .

distribute era um ramo da setuptools que foi recompildados em junho de 2013. O guia diz: "Use setuptools para definir projectos e criar Fonte Distribuições".

A partir de PEP 453 e Python 3.4, o guia recomenda, "Use pip para instalar pacotes Python de PyPI", e pip está incluído no Python 3.4 e instalado em virtualenvs por pyvenv, que também está incluído. Você pode encontrar o PEP 453 "rationale" seção interessante.

Há também ferramentas novas e newish mencionados no guia, incluindo wheel e buildout .

Eu estou feliz que eu leia as seguintes histórias técnicos / semi-políticas.

Por Martijn Faassen em 2009: A History of Python Embalagem .

E por Armin Ronacher em junho de 2013 (o título não é grave): Python Packaging: o ódio, ódio, ódio em todos os lugares

.

Para começar, pip é realmente novo. Novo, incompleta e em grande parte não-testadas no mundo real.

Ele mostra uma grande promessa, mas até o momento em que ele pode fazer tudo o que easy_install / setuptools pode fazê-lo não é provável a pegar em grande forma, certamente não na corporação.

easy_install / setuptools é grande e complexo - e que ofende muita gente. Infelizmente não há uma boa razão para que a complexidade que é que ele atende a um grande número de diferentes casos de uso. Minha própria está apoiando uma piscina grande (> 300) de usuários de desktop, além de uma grade de tamanho similar com um aplicativo atualizado com freqüência. A noção de que nós poderíamos fazer isso, permitindo que cada usuário para instalar a partir da fonte é ridículo -. Ovos revelaram-se uma forma confiável de distribuir meu projeto

Meu conselho: Aprenda a setuptools de uso - é realmente uma coisa maravilhosa. A maioria das pessoas que odeiam ele não entende isso, ou simplesmente não têm o caso de uso de como o sistema de distribuição de full-featured.

: -)

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