apt-get install python-xxx vs pip install

8

J'essaie toujours de comprendre ce problème que j'ai et j'ai lu une tonne de messages concernant sudo apt-get install python-XXXvs pip install, et j'en comprends l'essentiel (apt-get est un dépôt de package, géré par un groupe complètement différent de personnes pour pip, auto -mises à jour avec tout le reste quand une mise à jour est disponible, c'est binaire, etc.). Cependant, il y a quelques choses particulières que je ne comprends pas et auxquelles je n'ai pas pu trouver de réponses:

  1. Si je, pour une raison quelconque, installe d'abord un paquet, par exemple numpy, avec sudo apt-get install numpy, puis je le ferai plus tard pip install numpy. Ce qui se produit? est numpy installé à nouveau ailleurs avec la version différente (par exemple dans .local / lib), donc maintenant j'ai deux versions indépendantes? Lequel est utilisé lors de l'importation? (si j'ai bien compris, c'est séparé et apt-get est à l'échelle du système, mais j'ai vu des réponses contradictoires à cette question, par exemple ici )

  2. J'ai remarqué que beaucoup de paquets sur apt-get sont assez anciens par rapport à pip. par exemple au moment de la rédaction d'ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. Y a-t-il un avantage à commencer sudo apt-get installpar un pip install? ou est-ce juste stupide?

  3. J'ai remarqué que mon pip était 1.5.6 - c'est la dernière version actuelle si vous le faites sudo apt-get install python-pip. alors que sur pip c'est 8.0.2! Je crois que cela m'a posé des problèmes, car avec cette ancienne version, vous pouvez installer le même package encore et encore et cela ne vous avertit pas. Et d'une certaine façon, il n'écrase pas l'ancien. J'ai réalisé cela parce que je peux continuer à désinstaller le même paquet (par exemple numpy) et il est toujours là quand je le fais pip show numpy. Et bizarrement, montrant toujours le même dossier (.local /), mais avec des versions différentes: S J'ai donc deux questions à ce sujet:

    une. quelle est la meilleure façon d'installer pip? Je penche actuellement vers sudo apt-get install python-pip, pip install pip, sudo apt-get purge python-pip. Est-ce sage? Cela me semble un peu ridicule.

    b. maintenant que je sais que beaucoup de mes packages sont gâchés avec des installations en double, probablement parce que certains ont été installés avec apt-get puis plusieurs fois avec pip 1.5.6, quelle est la meilleure façon de vérifier les doublons et de les nettoyer? Je suppose qu'il n'est pas sûr d'utiliser un script pour pip désinstaller tout et réinstaller?

PS Je ne savais pas trop si je devrais poster ceci comme une nouvelle question ou comme une réponse à mon problème d'origine. Étant donné que cette question est beaucoup plus concise et générale, je pensais qu'il serait préférable de la séparer. Toutes mes excuses si je me suis trompé.

note
la source
Possibilité de dupliquer apt get install vs pip install
muru
En fait, je fais référence à ce message dans ma question, il a été très utile pour dissiper une grande partie de ma confusion, mais il ne répond pas à mes questions ci-dessus (au moins, je ne pouvais pas le voir)
note
Oh, dans votre autre question. J'ai juste regardé la liste des articles liés et je ne l'ai pas vue.
muru

Réponses:

8

Pour les archives, après beaucoup d'essais et d'erreurs, c'est ce que j'ai trouvé (rétrospectivement, certains morceaux ont du sens, d'autres assez confus).

  • Si vous sudo apt-get install python-xyz, le paquet s'apparaîtra dans . Bien sûr, vous pouvez l'importer en python, mais il n'apparaît pas dans pip.get_installed_distributions (). (Évidemment, le contraire n'est pas vrai. Si vous le faites, il n'apparaîtra pas dans votre apt / synaptique)pip listpip install xyz

  • Après, sudo apt-get install python-xyzsi vous faites pip install xyzce qui se passe, cela dépend de la version de pip que vous avez.

OLD v1.5.6 (la version actuelle livrée sur Ubuntu PPA):

  • Cette version de pip (1.5.6) va simplement installer une nouvelle copie de xyz dans un emplacement différent. Vous vous retrouvez avec plusieurs copies et cela provoque un énorme gâchis. par exemple:

    • numpy d'apt-get est 1.8.2 sur /usr/local/lib/python2.7/dist-packages
    • numpy de pip est 1.10.4 sur ~ / .local / lib / python2.7 / site-packages
  • Si je le fais pip install numpyencore, il le télécharge et l'installe à nouveau. Vous pourriez donc vous retrouver avec de nombreuses versions différentes auxquelles vous ne pouvez pas vraiment accéder. Je peux faire pip install numpy5 fois, puis je peux faire des pip uninstall numpy 5xfois! Évidemment, vous pouvez faire attention à ne pas le faire, mais parfois les scripts d'installation d'autres logiciels sont un peu négligents et peuvent gâcher les choses. Incroyable qu'Ubuntu expédie officiellement cette version de pip.

NOUVEAU v8.0.2 (la version actuelle sur pip elle-même):

  • les versions plus récentes de pip (par exemple 8.0.2 qui est sur pip) refuseront d'installer le même package en disant que l'exigence est déjà remplie. Vous ne pouvez donc pas installer une nouvelle version. C'est un bon comportement (plus d'informations sur l'obtention de cette version de pip plus tard).

  • Dans ce cas, vous pouvez uniquement mettre à niveau, c'est-à-dire installer avec l'indicateur -U.

  • Cependant, lorsque vous essayez pip install -U xyzsur un paquet installé avec sudo apt-get, vous obtiendrez une erreur d'autorisation car l'apt-get a été installé dans / usr / et vous avez besoin d'un accès root pour y écrire.

  • Donc AFAIK vous n'avez pas d'autre choix que de sudo pip install -U xyzpouvoir le mettre à jour. Dans ce cas, pip installe le dernier package au même endroit que sudo apt-get l'a écrit. par exemple dans mon cas /usr/local/lib/python2.7/dist-packages. C'est bon.

  • Il convient également de souligner que les packages sur apt sont souvent bien plus anciens que ceux sur pip (par exemple 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)

Donc , mes pensées actuelles sont d'obtenir les grandes choses avec sudo apt-get, par exemple sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nez spyder

puis les mettre à jour (ou au moins certains d'entre eux) avec sudo pip install -U.

NB Il semble assez important d'obtenir le nouveau pip de pip (très meta)

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

PS Je connais virtualenv mais je n'en ai pas besoin pour le moment. Je n'ai besoin que d'un seul environnement de développement.

Et voici un petit script pour vider une liste de packages, de version et de chemin (mais ne fonctionne que sur les modules installés par pip, pas ceux d'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
note
la source