Como um pacote Debian pode instalar módulos Python do PyPI?

13

Esta questão tenta complementar este . Eu tenho um aplicativo python que usa módulos de terceiros do PyPI. Eu quero empacotar meu aplicativo em um pacote debian, mas não sei como lidar com dependências python que não estão em repositórios debian / ubuntu (compactados como pacotes debian também)

Solução # 1:
construir os módulos do PyPI diretamente no meu pacote debian.

Solução # 2:
criar pacotes debian para todos os módulos PyPI Eu preciso usar stdeb e adicioná-los aos repositórios debian / ubuntu.

Eu realmente preciso de uma Solução # 3 porque eu quero instalar dependências PyPI quando eu instalar meu pacote debian, de preferência em um virtualenv!

O que seria a Solução # 3 ? Preciso ajustar o script do mantenedor DEBIAN / preinst ?

    
por andri_ch 01.08.2013 / 21:26

3 respostas

13

Falei com alguns mantenedores no canal de IRC do Debian irc: //irc.debian.org#debian-mentors , pedindo exatamente a mesma coisa, e o consenso geral foi:

Solução # 1:

Integração de dependências no seu pacote, copiando seus arquivos fonte como um único codebase é muito desaprovado. Isso frustraria o propósito de um sistema de empacotamento que lida com dependências, atualizações, controle de versão, etc.

Solução # 3:

O download de pacotes não-Debian ao instalar um binário ( .deb ) é um risco de segurança sério , definitivamente um não-não. Você não seria capaz de inspecionar as dependências extraindo o deb , porque elas são baixadas e instaladas no momento da instalação. É uma abordagem que ignora completamente o sistema de repositórios. Nenhum usuário em questão ficaria satisfeito com um pacote que, nos bastidores (e como root , lembre-se!), Faz o download de software não confiável adicional de fontes não confiáveis. Sim, isso exigiria mexer com DEBIAN/postinst (ou preinst ) e emitir um wget (ou, no seu caso, pip install ), e essa é a abordagem adotada pelo Flash, Oracle Java, Steam e outros. Mas isso é software proprietário de código fechado, então a segurança deles não é de qualquer forma.

Solução # 1.5:

Você não mencionou, mas você poderia integrar as dependências apenas no tempo de compilação , ou seja, no pacote source ( .orig.tar.gz , .debian.tar.gz , .dsc triad), fazendo o download do PyPi ao criar o pacote "binário" (o .deb ). As instruções para o pip install entrariam em debian/rules (observe o minúsculo debian , em oposição ao pacote binário), e seriam executadas quando você emitir debuild ou dpkg-buildpackage .

Este é um meio termo entre # 1 e # 3. Ele mitiga (mas não resolve!) Alguns dos problemas do nº 3: pelo menos você pode inspecionar o produto final, e o .deb não precisaria de acesso à Internet no momento da instalação. Todos os riscos e encargos são transferidos do usuário final para o mantenedor do pacote. Mas, tem os mesmos problemas que o número 1, pois ultrapassa a maior parte da infraestrutura do sistema de pacotes. Afinal, lidar com dependências (versões, atualizações, requisitos, conflitos) é porque dpkg / apt foi criado em primeiro lugar! :)

Solução # 2:

O One True Right Way ™ . Você cria pacotes debian para suas dependências, lista-os como requisitos em seu pacote e envia todos os .debs ou pacotes de código-fonte.

De lá, você tem várias opções:

  • Envie os pacotes fonte, tanto o seu software como o seu dependências, para inclusão no Debian. Se aceito, eles estarão automaticamente disponíveis para todos os usuários do Debian, incluindo todos os derivados, como o Ubuntu.

  • Carregue os pacotes fonte no Launchpad , criando assim um PPA que qualquer usuário do Ubuntu (e seus derivados como o Linux Mint) poderiam facilmente adicionar e instalar

  • Hospede seu próprio repositório Debian em seu site, que os usuários de qualquer sistema baseado no Debian possam adicionar ao seu /etc/apt/sources.list.d e usar a infraestrutura apt para baixar, instalar e manter atualizado (como o acima! )

  • Hospede os arquivos .deb para baixar e instalar diretamente. Nenhum apt ou atualizações automáticas envolveram o pensamento.

Quanto a como para empacotar suas dependências PyPi (e seu software python também!), existem várias ferramentas e referências que facilitam o processo:

  • stdeb , como você mencionou. Oldie e goodie.

  • Pybuild , uma nova ferramenta incrível do Debian que substitui o stdeb .

E muitas referências úteis:

Precisa de ajuda? Verifique isso:

por MestreLion 08.08.2014 / 14:39
2

Acho que você só precisa adicionar o código da linha de comando relevante ao script postinst no pacote .deb. Encontrado em esta resposta , mais detalhes no guia debian oficial .

    
por TheSchwa 08.08.2014 / 04:03
0

Eles não, é como cpan em perl, se você tem em repositórios, você pode instalar com apt-get, se não você pode instalar com pip, a diferença deve ser que pip instale em / usr / local.

Para instalar com pip você pode fazer:

apt-get install python-pip 
pip install foopackage 

por exemplo:

pip install MultipartPostHandler2
    
por Sérgio 13.11.2014 / 01:18