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-XXX
vs 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:
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 tardpip 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 )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 install
par unpip install
? ou est-ce juste stupide?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 faispip 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é.
Réponses:
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 list
pip install xyz
Après,
sudo apt-get install python-xyz
si vous faitespip install xyz
ce 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:
Si je le fais
pip install numpy
encore, 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 fairepip install numpy
5 fois, puis je peux faire despip uninstall numpy 5x
fois! É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 xyz
sur 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 xyz
pouvoir 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 exemplesudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pytho
n-nez spyderpuis 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)
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)
la source