Комбинация - пользователь с ошибкой --prefix с установкой setup.py

Я пытался установить пакеты Python в систему, к которой я недавно получил доступ. Я пытался использовать Python относительно новый для каталога пользовательских сайтов-пакетов и новый вариант --user. (Опция в настоящее время недокументирована, однако она существует для Python 2.6+, вы можете увидеть справку, запустив python setup.py install --help.)

Когда я попытался запустить

python setup.py install --user

на любом загруженном мной пакете, я всегда получал следующую ошибку:

error: can't combine user with with prefix/exec_prefix/home or install_(plat)base

Ошибка была чрезвычайно озадачена, потому что, как вы можете видеть, я не предоставлял флаги --prefix, --exec-prefix, --install-base или --install-platbase в качестве параметров командной строки. Я потратил много времени на то, чтобы выяснить, в чем проблема. Я документирую свой ответ ниже, в надежде избавить другую бедную душу несколько часов бритья яка.

Ответ 1

Одноразовый обход:

pip install --user --install-option="--prefix=" <package_name>

или

python setup.py install --user --prefix=

Обратите внимание, что после = нет текста (даже без пробелов).

Не забывайте флаг --user.

Установка нескольких пакетов:

Создайте ~/.pydistutils.cfg (или эквивалент для вашей ОС/платформы) со следующим содержимым:

[install]
prefix=

Обратите внимание, что после = нет текста (даже без пробелов).

Затем запустите необходимые команды pip install --user или python setup.py install --user. Не забывайте флаг --user.

Наконец, удалите или переименуйте этот файл. Если оставить этот файл, это вызовет проблемы при установке пакетов Python в общесистемном режиме (т.е. Без --user) в качестве этого пользователя с этим ~/.pydistutils.cfg.

Причина этой проблемы

Это, как представляется, проблема с OpenSUSE и RedHat, которая привела к ошибке в virtualenv на этих платформах.

Ошибка связана с конфигурационным файлом distutils на системном уровне (в моем случае /usr/lib64/python2.6/distutils/distutils.cfg), где был этот

[install]
prefix=/usr/local

В принципе, это эквивалентно тому, что всегда выполняется команда установки как install --prefix=/usr/local. Вы должны переопределить эту спецификацию, используя один из вышеприведенных методов.

Ответ 2

Как отмечалось в комментариях, принятый ответ (by @gotgenes, у которого, предположительно, есть гены), может привести к неожиданным последствиям.

@rogeleaderr говорит: "Обратите внимание, что сохранение этого файла подобно этому заставит Python думать, что/является вашим корневым каталогом библиотеки python, что приводит к запутывающим проблемам, если вы пытаетесь установить другие новые пакеты".

Вместо того, чтобы писать новый файл конфигурации, как рекомендует @gotgenes, лучше добавить --prefix= (без текста справа от знака равенства) в качестве опции в командной строке, как в

$ python setup.py install --user --prefix=