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?
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.
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
.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
.
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
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
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:
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
.
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.
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
.
Ça marche pour moi
Sudo /usr/local/bin/pip install --upgrade pip
Pour ajouter à angelokh
Sudo `which pip` install --upgrade pip
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