O pip sobrescreve os pacotes instalados pelo apt-get?

9

O que acontece se eu acidentalmente pip install um pacote que eu já instalei usando apt-get antes? Eu simplesmente uso a versão mais recente (ou seja, provavelmente a que instalei usando pip )? O que acontece ao contrário?

Nota: eu não uso o Python em um ambiente virtual (simplesmente porque não sei porque eu deveria - eu uso o Python como uma ferramenta de análise de dados e principalmente tento usar a última versão de tudo).

    
por Fred S 31.05.2014 / 02:03

2 respostas

3

Como @Timo mencionou em seu comentário, python -c "import sys; print sys.path" dará a você o caminho de carregamento do módulo Python para a sua instalação do Python. Em uma instalação relativamente nova de 16.04, há três diretórios de notas (entre os 10 que estavam no total):

  • '' (diretório do aplicativo)
  • '/ usr / local / lib / python2.7 / dist-packages' (onde o pip instala os módulos)
  • '/ usr / lib / python2.7 / dist-packages' (onde apt instalar módulos)

O mais importante a notar, entretanto, é que '/usr/local/lib/python2.7/dist-packages' é SUPERIOR em precedência que '/usr/lib/python2.7/dist-packages'.

Se você instalar primeiro um pacote Python via apt (-get), ele será instalado em '/usr/lib/python2.7/dist-packages'. Se depois você tentar usar o pip para instalar o módulo, o pip inicialmente dará um aviso de que a dependência já foi atendida e, em seguida, sairá; adicionar o sinalizador --upgrade forçará o pip a instalar, instalando o módulo em '/usr/local/lib/python2.7/dist-packages'. (Observe a saída que também diz que a versão em '/usr/lib/python2.7/dist-packages' não está desinstalada) Você pode verificar se a versão instalada pelo pip é a que está sendo usada usando o seguinte: python -c "import MODULE; print MODULE.__file__" .

Como tal, isso mostra que os pacotes instalados via pip terão precedência sobre os pacotes instalados pelo sistema, mas não sobrescreverão nada instalado do apt (-get).

    
por Bryan Wyatt 30.04.2016 / 07:33
1

Para adicionar a @Bryan Wyatt, parece desejável (e intencional) que os itens PIP instalados / atualizados tenham precedência sobre os pacotes instalados (provavelmente mais antigos) do APT. Meu sistema tinha os caminhos apt e pip invertidos. Deve ser (ignorando outras entradas):

  • '/ usr / local / lib / python2.7 / dist-packages' (onde o pip instala os módulos)
  • '/ usr / lib / python2.7 / dist-packages' (onde apt instalar módulos)

No entanto, devido a alguma ação desconhecida que devo ter tomado, esses caminhos apareceram na ordem oposta para mim (ignorando outras entradas):

  • '/ usr / lib / python2.7 / dist-packages' (onde apt instalar módulos)
  • '/ usr / local / lib / python2.7 / dist-packages' (onde o pip instala os módulos)

Acontece que algo que fiz adicionou /usr/lib/python2.7/dist-packages a /usr/local/lib/python2.7/dist-packages/easy-install.pth . Simplesmente remover a linha de easy-install.pth corrigiu a má ordem para mim. /usr/lib/python2.7/dist-packages ainda está no meu caminho, pois é adicionado posteriormente em outro lugar.

Como nota, o pprint mostrará seu caminho mais agradável ... ou seja:

$ python -c "import sys; import pprint; pprint.pprint(sys.path)"
['',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
    
por proximous 01.11.2016 / 16:21

Tags