2015-12-05 12 views
30

Ho voluto distribuire la mia app Python su Amazon Linux AMI 2015.09.1, che ha Python2.7 (predefinito) e pip (6.1.1). Poi, ho aggiornato il PIP con il comando:Pip di aggiornamento in Amazon Linux

sudo pip install -U pip 

Tuttavia, sembrava rotto, e ha mostrato il messaggio quando ho provato ad installare i pacchetti:

pkg_resources.DistributionNotFound: pip==6.1.1 

ho scoperto che pip rimuovere i file precedenti situato in /usr/bin/ e installato il nuovo in /usr/local/bin. Così, ho cercato di specificare la posizione utilizzando il comando:

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

Tuttavia, ancora installato il nuovo in /usr/local/bin. Oltre a ciò, pip non ha funzionato bene con sudo sebbene sia stato installato correttamente. Il messaggio di errore:

sudo: pip2.7: command not found 

C'è un modo per gestire correttamente pip?

+1

non utilizzare sudo,/usr/local/bin è la posizione giusta per pip – abolotnov

+0

@abolotnov Mostra sempre messaggi di errore senza sudo. Il messaggio: Autorizzazione negata: '/usr/local/lib/python2.7/site-packages/xxxxx.py' – zeck

+0

prova 'sudo/usr/lib/local/pip install --upgrade pip ' – abolotnov

risposta

33

Prova:

sudo which pip 

Questo può rivelare qualcosa come 'non pip in ($ PATH)'.

Se questo è il caso, si può poi fare:

which pip 

che vi darà un percorso come /usr/local/bin/pip.

copia + incolla il percorso per pip alla cartella sbin eseguendo: sudo cp /usr/local/bin/pip /usr/sbin/

Questo vi permetterà di eseguire sudo pip senza errori.

0

Penso che tu non abbia installato il pacchetto pythonXX-pip.

Ho aggiornato il mio direttamente a Python3.4, questi comandi funzionano per me.

sudo su 
yum install python34 
yum install python34-pip 
2

questo funziona per me

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

Il problema è in parte risposto alla tua domanda. Amazon AMI non considera /usr/local/bin come parte del PATH dell'account root. È possibile risolvere questo problema aggiornando l'account root ~/.bashrc per includerlo.

qualcosa di simile ...

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

+0

ha fatto il trucco e ha funzionato su Amazon Linux. – Stryker

+0

Questo ha funzionato perfettamente. –

22

lottato con questo per un po '. Ecco cosa ho trovato:

  • ec2_user trova l'eseguibile pip, ma ha un errore di modulo di importazione a causa di non avere other lettura/permessi di esecuzione sulle pip cartelle nella cartella /usr/local/lib/python2.7/site-packages.Questo è effettivamente ok, dal momento che nella maggior parte dei casi, le installazioni pip falliscono quando non vengono eseguite come root.
  • sudo non è stato trovato pip.
  • L'immissione di root con sudo su - consente di eseguire pip senza problemi.

La ragione sudo pip smette di funzionare dopo l'aggiornamento, è perché l'eseguibile (o link simbolico) viene rimosso dalla /usr/bin. Tuttavia, ciò che rimane è un file chiamato pip-27, che contiene quanto segue:

#!/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')() 
    ) 

Quindi, è lì che il nostro errore proviene, come l'aggiornamento chiaramente non pulisce il file su. Non del tutto chiaro su dove si verifica la traduzione del nome da pip a pip-2.7.

Come accennato in un'altra risposta, pip ora esiste in /usr/local/bin dopo l'aggiornamento, che non è più nel percorso protetto sudo. È possibile aggiungere questo percorso alla variabile secure_path eseguendo sudo visudo. Un'altra alternativa, se preferisci non aggiungere quel percorso al tuo secure_path, è creare un collegamento simbolico al nuovo eseguibile pip in /usr/bin.

+0

bella spiegazione @ Sector95. Inchiodato la causa principale. Questa dovrebbe essere la risposta accettata. – Pramit

4

Dopo aver lottato con questo per ore e leggere i commenti

which pip ha dato/usr/bin/pip, ma il seme reale si trovava in/usr/local/bin/pip a causa di pip aggiornare e ripulire non era completa

Quindi la rimozione del pip in/usr/bin/

sudo rm/usr/bin/PIP

e anche l'aggiunta di il nuovo pip al vostro percorso di esportazione

vim ~/.bash_profile

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

terminale di uscita, e login di nuovo

which pip dovrebbe dare/usr/local/bin/PIP

pip install --upgrade pip 
0

I pensare che la migliore strategia in questo caso è quella di gestire pip come parte di un ambiente virtuale usando virtualenv piuttosto che scherzare con la versione a livello di sistema.

Se siete d'accordo con questo, ecco l'idea di base:

  1. installare la versione di virtualenv fornito con la versione di pip si sta cercando di eseguire l'aggiornamento a al livello di sistema pip (ad esempiovirtualenv==15.1.0 viene fornito con 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 
    

    ho usato il virtualenv release notes per scoprire quale versione di pip corrisponde a quale versione di virtualenv.

  2. Creare l'ambiente virtuale:

     
    $ 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. attivare l'ambiente virtuale e verificare la versione e la posizione del aggiornato 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 
    

Ciò dovrebbe consentire di installare pacchetti a questo virtualenv utilizzando la versione pip di vostra scelta, senza la necessità di sudo.

Problemi correlati