web-dev-qa-db-fra.com

Mettre à niveau pip dans Amazon Linux

Je voulais déployer mon Python sur Amazon Linux AMI 2015.09.1, qui a Python2.7 (par défaut) et pip (6.1.1). Ensuite, j'ai mis à niveau le pip à l'aide de la commande:

Sudo pip install -U pip

Cependant, il semblait cassé et a montré le message lorsque j'ai essayé d'installer des packages:

pkg_resources.DistributionNotFound: pip==6.1.1

J'ai découvert que pip supprimait les fichiers précédents situés dans /usr/bin/, et installé le nouveau dans /usr/local/bin. Ainsi, j'ai essayé de spécifier l'emplacement en utilisant la commande:

Sudo pip install -U --install-option="--prefix='/usr/bin'" pip

Néanmoins, il a toujours installé le nouveau dans /usr/local/bin. En plus de cela, pip ne pouvait pas bien fonctionner avec Sudo bien qu'il soit installé avec succès. Le message d'erreur:

Sudo: pip2.7: command not found

Existe-t-il un moyen de gérer correctement pip?

36
zeck

Essayer:

Sudo which pip

Cela peut révéler quelque chose comme "pas de pip dans ($ PATH)".

Si tel est le cas, vous pouvez alors faire:

which pip

Ce qui vous donnera un chemin comme /usr/local/bin/pip.

Copiez + collez le chemin vers pip dans le dossier sbin en exécutant: Sudo cp /usr/local/bin/pip /usr/sbin/

Cela vous permettra d'exécuter Sudo pip sans aucune erreur.

47
Jihoon Baek

Aux prises avec cela pendant un certain temps. Voici ce que j'ai trouvé:

  • ec2_user trouve l'exécutable pip, mais a une erreur d'importation de module car other n'a aucune autorisation de lecture/exécution sur les dossiers pip dans le /usr/local/lib/python2.7/site-packages dossier. C'est en fait correct, car dans la plupart des cas, les installations de pip échouent quand elles ne sont pas exécutées en tant que root de toute façon.
  • Sudo ne trouve pas pip.
  • Saisie de root avec Sudo su - permet d'exécuter pip sans problème.

La raison Sudo pip cesse de fonctionner après la mise à niveau, car l'exécutable (ou le lien symbolique) est supprimé de /usr/bin. Cependant, ce qui reste est un fichier appelé pip-27, qui contient les éléments suivants:

#!/usr/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==6.1.1','console_scripts','pip2.7'
__requires__ = 'pip==6.1.1'
import sys
from pkg_resources import load_entry_point

if __== '__main__':
    sys.exit(
        load_entry_point('pip==6.1.1', 'console_scripts', 'pip2.7')()
    )

C'est donc de là que vient notre erreur, car la mise à niveau ne nettoie clairement pas ce fichier. Pas tout à fait clair où la traduction du nom de pip à pip-2.7 se produit.

Comme mentionné dans une autre réponse, pip existe maintenant dans /usr/local/bin après la mise à niveau, qui n'est plus dans le chemin sécurisé Sudo. Vous pouvez ajouter ce chemin au secure_path variable en exécutant Sudo visudo. Une autre alternative, si vous préférez ne pas ajouter ce chemin à votre secure_path consiste à créer un lien symbolique vers le nouvel exécutable pip dans /usr/bin.

25
Sector95

Le problème est partiellement répondu par votre question. Amazon AMI ne prend pas en compte /usr/local/bin pour faire partie du CHEMIN du compte root. Vous pouvez résoudre ce problème en mettant à jour le compte racine ~/.bashrc pour l'inclure.

Quelque chose comme ça...

export PATH=$PATH:/usr/local/bin

9
William Holroyd

Après avoir lutté avec cela pendant des heures et lu des commentaires

which pip a donné/usr/bin/pip, mais le pip réel se trouvait dans/usr/local/bin/pip en raison de la mise à niveau de pip et le nettoyage n'était pas terminé

Donc, retirer le pip dans/usr/bin /

Sudo rm/usr/bin/pip

et en ajoutant également le nouveau pip à votre chemin d'exportation

vim ~/.bash_profile

CHEMIN = $ CHEMIN: $ ACCUEIL/bin:/usr/local/bin

quitter le terminal et vous reconnecter

which pip devrait donner/usr/local/bin/pip

pip install --upgrade pip
5
Tosin

Je pense que la meilleure stratégie dans ce cas est de gérer pip dans le cadre d'un environnement virtuel utilisant virtualenv plutôt que de jouer avec la version au niveau du système.

Si cela vous convient, voici l'idée de base:

  1. Installez la version de virtualenv fournie avec la version de pip que vous souhaitez mettre à niveau vers le niveau système pip (par exemple virtualenv==15.1.0 livré avec pip==9.0.1):

     $ Sudo pip install -U virtualenv == 15.1.0 
     Vous utilisez la version 6.1.1 de pip, mais la version 9.0.1 est disponible. 
     Vous devriez envisager une mise à niveau via le Commande 'pip install --upgrade pip'. 
     Collecte de virtualenv == 15.1.0 
     Téléchargement de virtualenv-15.1.0-py2.py3-none-any.whl (1,8 Mo) 
     100% | ████████████████████████████████ | 1,8 Mo 135 ko/s 
     Installation des packages collectés: virtualenv 
     Installation existante trouvée: virtualenv 12.0.7 
     Désinstallation de virtualenv-12.0.7: 
     Désinstallation de virtualenv-12.0 réussie .7 
     Virtualenv-15.1.0 
     Installé avec succès

    J'ai utilisé les virtualenv notes de version pour savoir quelle version de pip correspond à quelle version de virtualenv.

  2. Créez l'environnement virtuel:

     $ virtualenv myenv 
     Nouveau python exécutable dans /home/ec2-user/myenv/bin/python2.7[.____. deposited également la création d'exécutable dans/home/ec2-user/myenv/bin/python 
     Installation de setuptools, pip, wheel ... terminée. 
    
  3. Activez l'environnement virtuel et confirmez la version et l'emplacement du pip mis à niveau:

     $ source myenv/bin/activate 
     (myenv) $ pip -V 
     pip 9.0.1 dans /home/ec2-user/myenv/local/lib/python2.7/dist-packages (python 2.7) 
     (myenv) $ which pip 
     ~/myenv/bin/pip 
    

Cela devrait vous permettre d'installer des packages sur ce virtualenv en utilisant la version pip de votre choix, sans avoir besoin de Sudo.

2
Hakan B.

Ça marche pour moi

Sudo /usr/local/bin/pip install --upgrade pip
2
angelokh

Pour ajouter à angelokh

Sudo `which pip` install --upgrade pip
1
granpappypimp

Je pense que vous n'avez pas installé le paquet pythonXX-pip.

J'ai mis à niveau le mien directement en Python3.4, ces commandes fonctionnent pour moi.

Sudo su
yum install python34
yum install python34-pip
1
Scott Nguyen