2013-04-28 14 views
5

Sto cercando di utilizzare pip per installare un pacchetto localmente in ~/.local. Il problema è che il pacchetto (in una versione precedente) è già disponibile globalmente sul sistema. Anche se la directory globale dei pacchetti python è non nel mio PYTHONPATH, pip rifiuta ancora di installare, pensando che il requisito del pacchetto sia soddisfatto. Questo è simile al problema descritto qui, tranne che non sto usando sudo quindi la soluzione non si applica: pip - Requirement already satisfied?utilizzando pip per installare i pacchetti localmente nonostante i requisiti globali soddisfatti

Se lo faccio:

pip install --user numpy 

Dice:

Requirement already satisfied (use --upgrade to upgrade): numpy in /usr/local/lib/python2.7/dist-packages/numpy-1.6.2-py2.7-linux-x86_64.egg 

Tuttavia, /usr/local/lib/... non è nel mio PYTHONPATH. L'unica cosa in PYTHONPATH è ~/.local.

Se provo a fare:

pip install --user --upgrade numpy 

Si scarica NumPy e lo compila, e poi pensa che io sto facendo un globale installare nonostante la bandierina --user e ottengo:

Installing collected packages: numpy 
    Found existing installation: numpy 1.6.2 
    Uninstalling numpy: 
Exception: 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/basecommand.py", line 107, in main 
    status = self.run(options, args) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/commands/install.py", line 261, in run 
    requirement_set.install(install_options, global_options) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/req.py", line 1162, in install 
    requirement.uninstall(auto_confirm=True) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/req.py", line 495, in uninstall 
    paths_to_remove.remove(auto_confirm) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/req.py", line 1492, in remove 
    renames(path, new_path) 
    File "/usr/local/lib/python2.7/dist-packages/pip-1.2.1-py2.7.egg/pip/util.py", line 273, in renames 
    shutil.move(old, new) 
    File "/usr/lib/python2.7/shutil.py", line 300, in move 
    os.unlink(src) 
OSError: [Errno 13] Permission denied: '/usr/bin/f2py' 

Come può essere risolto? Non sono sicuro del motivo per cui cerca di fare qualcosa che richiede autorizzazioni globali quando ha superato il flag --user.

C'è un modo per dire pip per utilizzare solo ~/.local e ignorare tutto il resto sul sistema? (Non voglio usare virtualenv E 'inutile qui, io non voglio più ambienti, uno solo!).

+0

perché non dovresti usare 'virtualenv', non è questo il motivo esatto per cui è stato creato? – dm03514

+3

Numpy non sta giocando bene con pip. Sta cercando di installare 'f2py' su'/usr/bin/'. Probabilmente perché è al di fuori di 'site-packages' di python.Molto probabilmente ci saranno altri file che devono essere installati al di fuori di questo, e pip non sembra sapere come gestirlo. Non sono sicuro che virtualenv ti aiuterà qui. – tiago

+0

@tiago * Numpy non sta giocando bene con pip. Sta cercando di installare f2py su /usr/bin/.* No, non è così. Sta tentando di ** disinstallare ** system numpy che fallisce a causa della mancanza di permessi. Vedi la mia risposta. –

risposta

2

Citing Marcus Smith (manutentore di pip):

Se pensate che il mondiale sito non è aggiornato, e vogliono l'ultimo di l'utente del sito, quindi utilizzare:
pip install --upgrade --user SomePackage

Perché (...) il pacchetto (in una versione precedente) è già disponibile a livello globale sul sistema devi usare l'opzione --upgrade come da sopra l'osservazione di Marcus. La disinstallazione del pacchetto numpy di sistema è probabilmente un bug nella versione di pip che si usa (1.2.1). Prova la versione corrente come molte questioni relative alla --user opzione sono state fissate nelle versioni 1.3 e 1.4

EDIT

Marcus Smith points al problema specifico nel suo commento dopo:

pip 1.3 ha # 705, che è fondamentale per utilizzare --user e --upgrade insieme.

Problemi correlati