2013-04-28 7 views
5

Ich versuche, pip zu verwenden, um ein Paket lokal in ~/.local zu installieren. Das Problem besteht darin, dass das Paket (in einer älteren Version) bereits global auf dem System verfügbar ist. Obwohl das Verzeichnis der globalen Python-Pakete nicht in meinem PYTHONPATH ist, weigert sich pip immer noch zu installieren und denkt, dass die Paketanforderung erfüllt ist. Dies ist vergleichbar mit dem Problem hier beschrieben, außer ich nicht mit sudo so die Lösung nicht gelten: pip - Requirement already satisfied?mit pip, um Pakete lokal trotz erfüllten globalen Anforderungen zu installieren

Wenn ich tun:

pip install --user numpy 

Dort heißt es:

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 

jedoch /usr/local/lib/... ist nicht in meinem PYTHONPATH. Die einzige Sache in PYTHONPATH ist ~/.local.

Wenn ich versuche zu tun:

pip install --user --upgrade numpy 

Es numpy heruntergeladen und kompiliert, und dann denkt, dass ich eine globale mache installieren trotz der --user Flagge und ich:

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' 

Wie kann das behoben werden? Ich bin nicht sicher, warum es versucht, alles zu tun, das globale Erlaubnis erfordert, wenn es das --user Kennzeichen übergibt.

Gibt es eine Möglichkeit, pip zu sagen, nur ~/.local zu verwenden und alles andere auf dem System zu ignorieren? (Ich will nicht verwenden virtualenv Es ist hier nicht notwendig, ich will nicht, mehrere Umgebungen, eine nur!).

+0

Warum würden Sie 'virtualenv' nicht verwenden, ist das nicht der genaue Grund, warum es erstellt wurde? – dm03514

+3

Numpy spielt nicht gut mit Pip. Es versucht, 'f2py' in'/usr/bin/'zu installieren. Wahrscheinlich, weil es außerhalb von Pythons 'site-packages' liegt.Höchstwahrscheinlich wird es andere Dateien geben, die außerhalb davon installiert werden müssen, und pip scheint nicht zu wissen, wie man damit umgeht. Nicht sicher, ob virtualenv hier helfen wird. – tiago

+0

@tiago * Numpy spielt nicht gut mit Pip. Es versucht, f2py auf /usr/bin/ zu installieren. Nein, tut es nicht. Es ist pip versucht ** System numpy ** zu deinstallieren, die wegen fehlender Berechtigungen fehlschlägt. Siehe meine Antwort. –

Antwort

2

Citing Marcus Smith (Betreuer des pip):

Wenn Sie die globale denken Website ist veraltet, und will die neuesten die Site-Benutzer, dann verwenden:
pip install --upgrade --user SomePackage

Da (...) das Paket (in einer älteren Version) bereits verfügbar ist weltweit auf dem System müssen Sie --upgrade Option wie oben Marcus 'Bemerkung verwenden. System numpy Paket deinstallieren ist wahrscheinlich ein Fehler in der von Ihnen verwendeten Version von pip (1.2.1). Versuchen Sie aktuelle Version so viele Fragen im Zusammenhang mit --user Option wurden in Versionen beheben 1.3 und 1.4

EDIT

Marcus Smith points zu bestimmtem Thema in seinem späteren Kommentar:

pip 1.3 hat # 705, die ist entscheidend für die Verwendung von --user und --upgrade zusammen.