использование pip для локальной установки пакетов, несмотря на выполнение глобальных требований

Я пытаюсь использовать 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! Здесь это не нужно, мне не нужны несколько сред, только одна.)


person Community    schedule 28.04.2013    source источник
comment
почему бы вам не использовать virtualenv, разве это не точная причина, по которой он был создан?   -  person dm03514    schedule 29.04.2013
comment
Numpy плохо работает с pip. Он пытается установить f2py на /usr/bin/. Вероятно, потому что он находится за пределами site-packages python. Скорее всего, помимо этого должны быть установлены другие файлы, и pip, похоже, не знает, как с этим справиться. Не уверен, поможет ли здесь virtualenv.   -  person tiago    schedule 29.04.2013
comment
@tiago Numpy плохо работает с pip. Он пытается установить f2py в /usr/bin/. Нет, это не так. Это pip пытается удалить системный блокнот, который терпит неудачу из-за отсутствия разрешений. Смотрите мой ответ.   -  person Piotr Dobrogost    schedule 30.11.2013
comment
Я думаю, что мой ответ дает решение - не могли бы вы проверить его?   -  person Piotr Dobrogost    schedule 22.02.2014


Ответы (1)


Цитируя Маркуса Смита (сопровождающий pip):

Если вы считаете, что глобальный сайт устарел, и хотите получить самую последнюю версию на пользовательском сайте, используйте:
pip install --upgrade --user SomePackage

Поскольку (...) пакет (в более старой версии) уже доступен глобально в системе, вы должны использовать параметр --upgrade, как указано выше в примечании Маркуса. Удаление системного пакета numpy, вероятно, является ошибкой в ​​используемой вами версии pip (1.2.1). Попробуйте текущую версию, так как многие проблемы, связанные с опцией --user, были исправлены в версиях 1.3 и 1.4.

РЕДАКТИРОВАТЬ

Маркус Смит указывает на конкретную проблему в своем более позднем комментарии:

pip 1.3 имеет #705, что очень важно для совместного использования --user и --upgrade.

person Piotr Dobrogost    schedule 30.11.2013