Pip écrase-t-il les paquets installés par apt-get?


9

Que se passe-t-il si j'ai accidentellement pip installun package que j'ai déjà installé en utilisant apt-getau préalable? Dois-je simplement utiliser la dernière version (c'est-à-dire probablement celle que j'ai installée en utilisant pip)? Que se passe-t-il dans l'autre sens?

Remarque: Je n'utilise pas Python dans un environnement virtuel (simplement parce que je ne sais pas pourquoi je devrais - j'utilise Python comme outil d'analyse de données et j'essaie surtout d'utiliser la dernière version de tout).


Si je ne me trompe pas, vous n'installez pas les mêmes packages en utilisant apt-getetpip
Lucio

Corerct, les pipinstalle dans les /usr/localsous-répertoires par défaut ou dans tout autre répertoire si vous le souhaitez.
Timo

3
Mais que se passe-t-il, par exemple, si je fais d'abord apt-get install python-pandassuivi par pip install pandas, ou l'inverse? Comment mon installation globale de python sait-elle laquelle des deux versions utiliser?
Fred S

1
@FredS: Exécutez la commande suivante dans le terminal, Python recherchera dans cet ordre spécifique un module:python -c "import sys; print sys.path"
Timo

Réponses:


3

Comme @Timo l'a mentionné dans son commentaire, python -c "import sys; print sys.path"vous donnera le chemin de chargement du module Python pour votre installation de Python. Sur une installation relativement récente du 16.04, il y a trois répertoires à noter (parmi les 10 au total qui étaient dans le mien):

  • '' (répertoire de l'application)
  • '/usr/local/lib/python2.7/dist-packages' (où pip installe les modules)
  • '/usr/lib/python2.7/dist-packages' (où apt installe les modules)

Le plus important à noter, cependant, est que «/usr/local/lib/python2.7/dist-packages» est plus élevé en priorité que «/usr/lib/python2.7/dist-packages».

Si vous installez d'abord un paquet Python via apt (-get), il s'installera dans '/usr/lib/python2.7/dist-packages'. Si vous essayez plus tard d'utiliser pip pour installer le module, pip donnera initialement un avertissement que la dépendance est déjà satisfaite, puis quittera; l'ajout de l'option --upgrade forcera pip à installer, installant le module dans '/usr/local/lib/python2.7/dist-packages'. (Notez la sortie qui indique également que la version en « /usr/lib/python2.7/dist-packages » n'est pas désinstallée) Vous pouvez alors vérifier que la version pip installé est celui utilisé en utilisant ce qui suit: python -c "import MODULE; print MODULE.__file__".

En tant que tel, cela montre que les packages installés via pip auront priorité sur les packages installés par le système, mais n'écraseront rien installé depuis apt (-get).


1

Pour ajouter à @Bryan Wyatt, il semble souhaitable (et prévu) que les éléments installés / mis à niveau PIP aient priorité sur les packages installés (probablement plus anciens) APT. Mon système avait les chemins apt et pip inversés. Cela devrait être (en ignorant les autres entrées):

  • '/usr/local/lib/python2.7/dist-packages' (où pip installe les modules)
  • '/usr/lib/python2.7/dist-packages' (où apt installe les modules)

Pourtant, en raison d'une action inconnue que j'ai dû prendre, ces chemins sont apparus dans l'ordre inverse pour moi (en ignorant les autres entrées):

  • '/usr/lib/python2.7/dist-packages' (où apt installe les modules)
  • '/usr/local/lib/python2.7/dist-packages' (où pip installe les modules)

Il se trouve quelque chose que je n'ajouté /usr/lib/python2.7/dist-packagesà /usr/local/lib/python2.7/dist-packages/easy-install.pth. Il suffit de supprimer la ligne de easy-install.pthcorriger le problème pour moi. /usr/lib/python2.7/dist-packagesest toujours sur mon chemin, car il est ajouté à un stade ultérieur ailleurs.

En guise de remarque, pprint affichera mieux votre chemin ... c'est-à-dire:

$ 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']
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.