Ainda estou tentando entender esse problema que estou tendo e li várias postagens sobre o sudo apt-get install python-XXX
vs 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:
Se eu, por qualquer motivo, primeiro instalar um pacote, por exemplo, numpy, with
sudo apt-get install numpy
, e depois eupip 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 )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 install
seguido de umpip install
? ou isso é apenas estúpido?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çopip 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.
fonte
Respostas:
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 empip 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ê fizerpip install xyz
isso, não aparecerá no seu apt / synaptic)Depois,
sudo apt-get install python-xyz
se você fizer opip install xyz
que 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:
Se eu fizer
pip install numpy
novamente, ele baixa e instala novamente. Então você pode acabar com muitas versões diferentes que você realmente não pode acessar. Eu posso fazerpip install numpy
5x vezes, e então eu posso fazerpip uninstall numpy 5x
vezes! 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 xyz
instalar 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 xyz
nã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 pytho
spyder n-nosee atualize-os (ou pelo menos alguns deles) com
sudo pip install -U
.NB: Parece muito importante obter o novo pip do pip (muito meta)
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)
fonte