Комбинация - пользователь с ошибкой --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=