2015-12-05 13 views
30

Ich wollte meine Python-App auf Amazon Linux AMI 2015.09.1 ​​bereitstellen, die Python2.7 (Standard) und PIP (6.1.1) hat. Dann verbesserte ich die pip dem Befehl:Upgrade-Pip in Amazon Linux

sudo pip install -U pip 

Aber es schien gebrochen, und zeigte die Nachricht als ich versuchte, Pakete zu installieren:

pkg_resources.DistributionNotFound: pip==6.1.1 

Ich fand heraus, dass pip die vorherigen Dateien entfernen befindet sich in /usr/bin/, und installierte das neue in /usr/local/bin. So habe ich versucht, mit dem Befehl den Speicherort angeben:

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

Trotzdem ist es immer noch die neuen in /usr/local/bin installiert. Darüber hinaus konnte pip nicht gut mit sudo arbeiten, obwohl es erfolgreich installiert wurde. Die Fehlermeldung:

sudo: pip2.7: command not found 

Gibt es eine Möglichkeit, richtig Pip zu verwalten?

+1

nicht sudo verwenden,/usr/local/bin ist der richtige Ort für pip – abolotnov

+0

@abolotnov Es zeigte immer Fehlermeldungen ohne sudo. Die Meldung: Berechtigung verweigert: '/usr/local/lib/python2.7/site-packages/xxxxx.py' – zeck

+0

versuchen Sie 'sudo/usr/lib/local/pip installieren --upgrade pip' – abolotnov

Antwort

33

Versuchen:

sudo which pip 

Das ist etwas wie 'kein pip in ($ PATH)' zeigen kann.

Wenn das der Fall ist, können Sie dann tun:

which pip 

dem Sie einen Pfad wie /usr/local/bin/pip geben wird.

Copy + Paste der Pfad zu dem Ordner sbin pip durch Ausführen von: sudo cp /usr/local/bin/pip /usr/sbin/

Dies ermöglicht es Ihnen sudo pip ohne Fehler auszuführen.

0

Ich glaube, Sie haben das pythonXX-pip Paket nicht installiert.

Ich habe meine direkt auf Python3.4 aktualisiert, diese Befehle funktionieren für mich. Diese

sudo su 
yum install python34 
yum install python34-pip 
2

funktioniert für mich

sudo /usr/local/bin/pip install --upgrade pip 
8

Das Problem wird teilweise durch Ihre Frage beantwortet. Der Amazon AMI betrachtet /usr/local/bin nicht als Teil des PATH des root-Accounts. Sie können dies beheben, indem Sie die ~/.bashrc des root-Kontos aktualisieren, um es einzuschließen.

So etwas ...

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

+0

hat den Trick gemacht und an Amazon Linux gearbeitet. – Stryker

+0

Das hat perfekt funktioniert. –

22

für eine Weile mit diesem Kämpfte. Hier ist, was ich gefunden habe:

  • ec2_user die pip ausführbare findet, hat aber einen Modul Importfehler aufgrund other keine Lese-/Ausführungsberechtigungen für die pip Ordner im /usr/local/lib/python2.7/site-packages Ordner.Dies ist eigentlich in Ordnung, da in den meisten Fällen pip installiert fehlschlägt, wenn nicht als root sowieso ausgeführt wird.
  • sudo kann pip nicht finden.
  • Durch Eingabe von root mit sudo su - kann pip ohne Probleme ausgeführt werden.

Der Grund sudo pip stoppt nach dem Upgrade ist, da die ausführbare Datei (oder einen symbolischen Link) von /usr/bin entfernt wird. Doch was bleibt, ist eine Datei pip-27, genannt, die folgende enthält:

#!/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 __name__ == '__main__': 
    sys.exit(
     load_entry_point('pip==6.1.1', 'console_scripts', 'pip2.7')() 
    ) 

Also, das ist, wo unsere Fehler herkommt, wie das Upgrade eindeutig diese Datei nicht auf nicht reinigen. Nicht ganz klar, wo die Namensübersetzung von pip zu pip-2.7 auftritt.

Wie in einer anderen Antwort erwähnt, existiert pip jetzt in /usr/local/bin nach dem Upgrade, das nicht mehr in der sudo sicheren Pfad ist. Sie können diesen Pfad zur Variablen secure_path hinzufügen, indem Sie ausführen. Eine andere Alternative, wenn Sie diesen Pfad nicht zu Ihrem secure_path hinzufügen möchten, besteht darin, eine symbolische Verknüpfung zu der neuen ausführbaren Datei pip in /usr/bin herzustellen.

+0

nette Erklärung @ Sector95. Nailed die Ursache. Dies sollte die akzeptierte Antwort sein. – Pramit

4

Nach stundenlang kämpfen mit diesem und lesen Kommentare

which pip gab/usr/bin/pip, aber die tatsächliche pip wurde unter/usr/local/bin/pip aufgrund liegt pip Upgrade und aufzuräumen war nicht komplette

So in/usr/bin den Pip-Entfernungs/

sudo rm/usr/bin/pip

und auch das Hinzufügen die neue pip auf Ihre Exportpfad

vim ~/.bash_profile

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

Ausfahrt Terminal und zurück anmelden

which pip geben sollte/usr/local/bin/pip

pip install --upgrade pip 
0

I denke, die beste Strategie in diesem Fall ist es zu verwalten pip ist als Teil einer virtuellen Umgebung mit virtualenv anstatt Chaos mit der Version auf Systemebene.

Wenn Sie mit dem OK sind, ist hier die Grundidee:

  1. Installieren Sie die Version von virtualenv mit der Version von pip verpackt Sie auf das System-Level-Upgrade suchen, um pip (zvirtualenv==15.1.0 kommt mit pip==9.0.1):

     
    $ sudo pip install -U virtualenv==15.1.0 
    You are using pip version 6.1.1, however version 9.0.1 is available. 
    You should consider upgrading via the 'pip install --upgrade pip' command. 
    Collecting virtualenv==15.1.0 
        Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB) 
        100% |████████████████████████████████| 1.8MB 135kB/s 
    Installing collected packages: virtualenv 
        Found existing installation: virtualenv 12.0.7 
        Uninstalling virtualenv-12.0.7: 
         Successfully uninstalled virtualenv-12.0.7 
    Successfully installed virtualenv-15.1.0 
    

    ich die virtualenv release notes verwendet, um herauszufinden, welche Version von pip entspricht, welche Version von virtualenv.

  2. die virtuelle Umgebung erstellen:

     
    $ virtualenv myenv 
    New python executable in /home/ec2-user/myenv/bin/python2.7 
    Also creating executable in /home/ec2-user/myenv/bin/python 
    Installing setuptools, pip, wheel...done. 
    
  3. die virtuelle Umgebung aktivieren und bestätigen Sie die Version und den Speicherort der aktualisierten pip:

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

Diese erlauben sollten Sie Pakete installieren zu diesem virtualenv mit der pip Version Ihrer Wahl, ohne die Notwendigkeit sudo.

Verwandte Themen