Я пытаюсь использовать pip для локальной установки пакета в ~/.local
. Проблема в том, что пакет (в более старой версии) уже глобально доступен в системе. Несмотря на то, что глобальный каталог пакетов python нет в моем PYTHONPATH
, pip по-прежнему отказывается устанавливать, думая, что требования к пакету выполнены. Это похоже на описанную здесь проблему, за исключением того, что я не использую sudo
, поэтому решение не применяется: pip Требование уже выполнено?
If I do:
pip install --user numpy
В нем говорится:
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
Однако /usr/local/lib/...
нет в моем PYTHONPATH
. В PYTHONPATH
есть только ~/.local
.
Если я попытаюсь сделать:
pip install --user --upgrade numpy
Он загружает numpy и компилирует его, а затем думает, что я выполняю глобальную установку, несмотря на флаг --user, и я получаю:
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'
Как это можно исправить? Я не уверен, почему он пытается сделать что-то, что требует глобальных разрешений, когда ему передан флаг --user
.
Есть ли способ сказать pip просто использовать ~/.local
и игнорировать все остальное в системе? (Я не хочу использовать virtualenv! Здесь это не нужно, мне не нужны несколько сред, только одна.)
virtualenv
, разве это не точная причина, по которой он был создан? - person dm03514   schedule 29.04.2013f2py
на/usr/bin/
. Вероятно, потому что он находится за пределамиsite-packages
python. Скорее всего, помимо этого должны быть установлены другие файлы, и pip, похоже, не знает, как с этим справиться. Не уверен, поможет ли здесь virtualenv. - person tiago   schedule 29.04.2013