easy_install / pip ou apt-get

30

Como observado na página wiki do Ubuntu no Rails , é recomendado que gems gerencie suas dependências Rails / Ruby.

Qual é a melhor prática com pacotes Python como o Django? Devo instalá-los através do apt-get ou devo deixar o easy_install / pip buscá-los no PyPi?

    
por Leonard Ehrenfried 11.01.2011 / 11:36

2 respostas

29

Existem vários argumentos:

  1. Use Repositórios / PPAs porque eles manterão você estável e atualizado com correções de segurança.

    Isso é verdade principalmente. Se, por exemplo, você instalar python-django como eu, você receberá atualizações de segurança. Isso é bom porque você só tem que ficar por dentro do apt, mas você ainda tem que testar as coisas antes de empurrar as atualizações (embora o teste deva ficar bem a cada vez).

    Você pode argumentar que, se usou pip , talvez nunca verifique se há atualizações.

  2. Use pip para poder usar as versões "estáveis" adequadas.

    Não há dúvidas: os acordos estão atrás do mundo real. O Django é 2.0, mas os repositórios da versão LTS do Ubuntu (que muitas pessoas usam para servidores) você só obtém 1.8 no Ubuntu 16.4 lts com o Python 2, mas ainda recebe atualizações de segurança.

    pip oferece a você o mais recente o tempo todo. Você só precisa atualizá-los você mesmo.

  3. Atualizar uma instalação do Python repo usada pode ser um pesadelo

    Quando você distaliza o Ubuntu para a próxima versão, ele atualiza muitos pacotes. Muitas coisas mudam. Eu sei que no Django isso significa que você tem que tomar cuidado para ficar atento a incompatibilidades de código, depreciações ... Mas o mesmo se aplica a todos os outros códigos Python.

    O mesmo vale para pip , mas com pip você consegue fazer uma coisa de cada vez. Você sabe o que causa os problemas para saber onde procurar a correção.

  4. pip + virtualenv permite que você mantenha as coisas separadas

    virtualenv permite que você tenha pequenos ambientes Python portáteis. Isso permite que você tenha vários ambientes diferentes do Python sendo executados lado a lado na mesma máquina.

    O benefício óbvio parece ser para a manutenção, já que você pode gerenciar o ambiente da mesma maneira que gerencia o código. Até mesmo armazenar o ambiente no VCS também ... mas você deve se lembrar que ter doze virtualenv s diferentes significa doze ambientes que você precisa verificar e atualizar.

Editar: Depois de uma série horrível de atualizações em um servidor para obtê-lo de Lucid para Precise, eu mudei de um Apt + pip misto (nr 1 e 2) para uma situação de pip + virtualenv puro (nr. 4) . Em vez de ter um virtualenv por site, eu tenho um compartilhado entre uma dúzia de sites. Isso está funcionando por enquanto.

Eu também tive que escrever um pequeno script que verifica o status dos pacotes instalados com o pip. Se houver atualizações, eu tenho que aplicá-las manualmente (o que é bom porque eu as testo localmente, em um virtualenv local). Isso tudo ainda é um pouco mais doloroso do que era originalmente, mas muito melhor a longo prazo.

    
por Oli 11.01.2011 / 12:23
10
  • Pacotes dos repositórios

    Estes devem ser instalados sempre que sua aplicação estiver de alguma forma específica ao Ubuntu . Eles garantem uma versão estável que você pode instalar através de máquinas Ubuntu, elas são suportadas e às vezes mais maduras do que as que você obtém via pip. Se você implantar um monte de servidores Ubuntu, ou se você estiver escrevendo um aplicativo do Ubuntu, use , se disponível .

    Eles também contêm algumas modificações específicas do Ubuntu.

  • pip vs easy_install

    Não há muito a dizer sobre isso, como disse o hacker do Django, James Bennett:

      

    Por favor, pelo amor de Guido, pare de usar setuptools e easy_install, e use distutils e pip em seu lugar.

    Para uma discussão aprofundada sobre as diferenças, consulte Na embalagem da James Bennett (do django) e Algumas correções para “na embalagem” por Ian Bicking (de mozilla).

Se você quiser estar seguro, experimente suas implantações de pip usando virtualenv . Isso oferece um ambiente python isolado, para que você possa ter certeza de que seu aplicativo será executado em qualquer máquina.

Espere um pouco, eu confio que algumas pessoas vão discordar de mim.

    
por Stefano Palazzo 11.01.2011 / 11:46

Tags