apt-get install python-xxx vs instalação do pip


8

Ainda estou tentando entender esse problema que estou tendo e li várias postagens sobre o sudo apt-get install python-XXXvs pip install, e entendo o tom dele (o apt-get é um repositório de pacotes, gerenciado por um grupo completamente diferente de pessoas para fazer pip, auto -updates junto com todo o resto quando há uma atualização disponível, é binária etc). No entanto, existem algumas coisas em particular que não entendo e que não consegui encontrar respostas para:

  1. Se eu, por qualquer motivo, primeiro instalar um pacote, por exemplo, numpy, with sudo apt-get install numpy, e depois eu pip install numpy. O que acontece? o numpy está instalado novamente em outro lugar com uma versão diferente (por exemplo, em .local / lib), então agora eu tenho duas versões independentes? Qual é usado quando eu importo? (se entendi corretamente, é separado e o apt-get é amplo para todo o sistema, mas vi respostas conflitantes a essa pergunta, por exemplo, aqui )

  2. Notei que muitos pacotes no apt-get são bastante antigos em comparação com o pip. por exemplo, no momento da redação do ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. Existe alguma vantagem em primeiro lugar sudo apt-get installseguido de um pip install? ou isso é apenas estúpido?

  3. Percebi que meu pip era 1.5.6 - é o mais recente, se você o fizer sudo apt-get install python-pip. enquanto no pip é 8.0.2! Acredito que isso esteja me causando problemas, porque com essa versão antiga você pode instalar o mesmo pacote repetidamente e isso não avisa. E de alguma forma, não escreve sobre o antigo. Percebi isso porque posso continuar desinstalando o mesmo pacote (por exemplo, numpy) e ele ainda está sempre lá quando o faço pip show numpy. E, estranhamente, sempre mostrando a mesma pasta (.local /), mas com versões diferentes: S Então, eu tenho duas perguntas relacionadas a isso:

    uma. qual é a melhor maneira de instalar o pip? Atualmente estou inclinado para sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. Isso é sábio? Parece um pouco ridículo para mim.

    b. agora que sei que muitos dos meus pacotes estão bagunçados com instalações duplicadas, provavelmente porque alguns foram instalados com o apt-get e depois várias vezes com o pip 1.5.6, qual é a melhor maneira de verificar se há duplicatas e limpá-la? Eu acho que não é seguro usar um script para desinstalar todos os pip e reinstalar?

PS: Eu não tinha certeza se deveria postar isso como uma nova pergunta ou como resposta ao meu problema original. Como essa pergunta é muito mais concisa e geral, senti que seria melhor separar. Desculpas se eu estava enganado.


Possível duplicata do apt get install vs pip install
muru

Na verdade, eu referenciar esse post na minha pergunta, ele foi muito útil para limpar um monte de minha confusão, mas ele não responder às minhas perguntas acima (pelo menos eu não podia vê-lo)
memo

Oh, na sua outra pergunta. Eu apenas olhei para a lista de postagens vinculadas e não a vi lá.
Muru

Respostas:


8

Para os arquivos, após muitas tentativas e erros, foi o que eu encontrei (em retrospecto, alguns bits fazem sentido, outros bastante confusos).

  • Se você sudo apt-get install python-xyz, o pacote irá aparecer em pip list. É claro que você pode importá-lo em python, mas não aparece em pip.get_installed_distributions (). (Obviamente, o oposto não é verdadeiro. Ou seja, se você fizer pip install xyzisso, não aparecerá no seu apt / synaptic)

  • Depois, sudo apt-get install python-xyzse você fizer o pip install xyzque acontece, depende da versão do pip que você possui.

OLD v1.5.6 (a versão atual fornecida no Ubuntu PPA):

  • Esta versão do pip (1.5.6) instalará apenas uma nova cópia do xyz em um local diferente. Você acaba com várias cópias e isso causa uma enorme bagunça. por exemplo:

    • numpy do apt-get é 1.8.2 em /usr/local/lib/python2.7/dist-packages
    • numpy do pip é 1.10.4 em ~ / .local / lib / python2.7 / site-packages
  • Se eu fizer pip install numpynovamente, ele baixa e instala novamente. Então você pode acabar com muitas versões diferentes que você realmente não pode acessar. Eu posso fazer pip install numpy5x vezes, e então eu posso fazer pip uninstall numpy 5xvezes! Obviamente, você deve prestar atenção para não fazer isso, mas às vezes os scripts de instalação de outros softwares são um pouco descuidados e podem atrapalhar as coisas. Inacreditável que o Ubuntu envie oficialmente esta versão do pip.

NOVO v8.0.2 (a versão atual no próprio pip):

  • versões mais recentes do pip (por exemplo, 8.0.2, que está no pip) se recusarão a instalar o mesmo pacote dizendo que o requisito já foi atendido. Portanto, você não pode instalar uma nova versão. Esse é um bom comportamento (mais sobre como obter esta versão do pip posteriormente).

  • Nesse caso, você pode apenas atualizar, ou seja, instalar com o sinalizador -U.

  • No entanto, quando você tenta pip install -U xyzinstalar um pacote instalado com o sudo apt-get, você obtém um erro de permissão porque o apt-get foi instalado em / usr / e você precisa de acesso root para escrever nele.

  • Então, AFAIK, você não tem escolha a sudo pip install -U xyznão ser poder atualizá-lo. Nesse caso, o pip instala o pacote mais recente no mesmo local que o sudo apt-get o escreveu. por exemplo, no meu caso /usr/local/lib/python2.7/dist-packages. Isso é bom.

  • Também vale ressaltar que os pacotes no apt geralmente são bem mais antigos que os do pip (por exemplo, numpy v1.8.2 vs 1.10.4, scipy 0.14.1 vs 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs 2.3.8)

Então, meus pensamentos atuais são resolver os problemas sudo apt-get, por exemplo, sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pythospyder n-nose

e atualize-os (ou pelo menos alguns deles) com sudo pip install -U.

NB: Parece muito importante obter o novo pip do pip (muito meta)

sudo apt-get install python-pip
sudo pip install -U pip

PS Estou ciente do virtualenv, mas não preciso disso no momento. Eu preciso de apenas um ambiente de desenvolvimento.

E aqui está um pequeno script para despejar uma lista de pacotes, versão e caminho (mas só funciona nos módulos instalados pelo pip, não nos do apt-get)

import pip
pp = pip.get_installed_distributions()
for p in sorted([p.location+"\t"+p.project_name+" ("+p.version+")" for p in pp]):
    print p
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.