최근에 액세스 한 시스템에 Python 패키지를 설치하려고했습니다. 나는 Python의 상대적으로 새로운 per user site-packages 디렉토리 와 새로운 옵션 을 활용하려고했습니다 --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
명령 줄 옵션과 같은 플래그. 나는 문제가 무엇인지 알아 내기 위해 많은 시간을 낭비했다. 나는 다른 불쌍한 영혼이 몇 시간 동안 야크 면도를 할 수 있기를 희망하면서 아래에 내 대답을 문서화 합니다.
답변
일회성 해결 방법 :
pip install --user --install-option="--prefix=" <package_name>
또는
python setup.py install --user --prefix=
뒤에는 텍스트 (공백도 아님)가 없습니다 =
.
마십시오 하지 잊어 --user
플래그.
여러 패키지 설치 :
~/.pydistutils.cfg
다음 내용으로 생성 (또는 OS / 플랫폼에 해당) :
[install]
prefix=
뒤에는 텍스트 (공백도 아님)가 없습니다 =
.
그런 다음 필요한 pip install --user
또는 python setup.py install --user
명령을 실행하십시오 . 마십시오 하지 잊어 --user
플래그.
마지막으로이 파일을 제거하거나 이름을 바꿉니다. 이 파일을 그대로두면이 .NET 파일을 사용하는 --user
이 사용자로 시스템 전체 (즉,없이 ) Python 패키지를 설치할 때 문제가 발생합니다 ~/.pydistutils.cfg
.
이 문제의 원인
이는 OpenSUSE와 RedHat 모두에서 문제로 보이며, 이러한 플랫폼 에서 virtualenv 에 버그가 발생했습니다 .
이 오류는 시스템 수준 distutils 구성 파일 (내 경우 /usr/lib64/python2.6/distutils/distutils.cfg
)에서 발생합니다.
[install]
prefix=/usr/local
기본적으로 이것은 항상 install 명령을 install --prefix=/usr/local
. 위의 기술 중 하나를 사용하여이 사양을 재정의해야합니다.
답변
의견에서 언급했듯이 허용 된 답변 (아마도 유전자가있는 @gotgenes의 답변)은 예기치 않은 결과를 초래할 수 있습니다.
@rogeleaderr는 “이 파일을 이렇게 유지하면 파이썬이 /가 루트 파이썬 라이브러리 디렉토리라고 생각하게하여 다른 새 패키지를 설치하려고하면 혼란스러운 문제가 발생합니다.”라고 말합니다.
@gotgenes가 권장하는대로 새 구성 파일을 작성하는 대신 다음 --prefix=
과 같이 명령 줄 의 옵션으로 (등호 오른쪽에 텍스트 없음 )을 추가하는 것이 더 좋습니다 .
$ python setup.py install --user --prefix=
답변
다른 사람의 시간을 절약하기 위해 게시하는 중 …
일부 환경에서 --target
( -t
) 스위치를 사용하면 여전히 동일한 오류가 발생합니다. 두 가지 Linux 버전에 대한 테스트에서 --prefix=
매개 변수를 사용할 때 동일한 문제가 발생했습니다 .
암호:
PYTHONUSERBASE=/tmp/ pip install --user --force-reinstall $PACKAGE
설명 : 여러 환경 (MacOS, Amazon Linux, Debian)에서 작동하는 것처럼 보이는 해결 방법은 PYTHONUSERBASE
환경 변수를 임시 위치 로 설정하는 것입니다. --force-reinstall
패키지가 이미 설치된 경우에도 로컬 설치를 트리거하는 데 사용됩니다.
그러면 모듈이 다음과 같이 컴파일 / 설치됩니다 (OS 및 Python 버전에 따라 다름). /tmp/lib/python2.7/site-packages/*
답변
간단히 실행할 수 있으며 pip install --user .
접두사 인수가 필요하지 않습니다.
pip가 Python 3을 사용하도록 구성된 경우 기본적으로 python3으로 설정되기 때문에 더 좋습니다. (입력하는 것을 잊었고 python3 setup.py
2.7에서 3 전용 패키지를 설치했습니다)
답변
나는 같은 문제가 있었다. 다음 ~/.config/pip/pip.conf
과 같이 내부에 숨겨져 있습니다 .
[global]
target=/foo/bar
이러한 구성은 내가 알지 못하는 사이에 타사 스크립트에 의해 생성되었습니다.
pip 구성 파일을 확인하고 target=/foo/bar
옵션을 제거하는 것이 좋습니다 .