--user와 --prefix 오류를 setup.py 설치와 결합


103

최근에 액세스 한 시스템에 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명령 줄 옵션과 같은 플래그. 나는 문제가 무엇인지 알아 내기 위해 많은 시간을 낭비했다. 나는 다른 불쌍한 영혼이 몇 시간 동안 야크 면도를 할 수 있기를 희망하면서 아래에 내 대답을 문서화 합니다.


2
에서 ./configure --prefix=${HOME}"user = 1"이있는 동안 소스에서 python 3.6을 설치하려고하면 동일한 오류가 발생 ~/.pydistutils.cfg합니다. 이 경우 설치 프로세스가 완료 될 수 있도록 임시 주석 "user = 1"이 필요합니다.
bli

bli는 좋은 힌트를주었습니다. 이 옵션을 사용하지 않았는데도 --user 옵션이 어디서 오는지 궁금합니다. pip install --prefix / home / myhomedir. ~ / .pydistutils.cfg 파일이 없지만 --user 옵션이 설정된 위치를 찾고 있습니다.
Kemin Zhou

문제의 원인을 파악하십시오. 이것은 데비안 전용입니다. --system 옵션을 추가하여 문제가 해결되었습니다.
Kemin 저우

답변:


161

일회성 해결 방법 :

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. 위의 기술 중 하나를 사용하여이 사양을 재정의해야합니다.


1
대단히 감사합니다. 빈 접두사가 내 문제를 해결했습니다. pip 1.1 openSuSE 11.4.
guettli

6
또한 시스템 전체 distutils.cfg의 값을 대체 할 명령 줄에서 setup.py에 = 빈 --prefix를 전달할 수
Tuxdude

2
와! 이것은 나에게도 효과적이었습니다. Powerline을 설치하려고 할 때 동일한 오류가 발생했습니다. powerline.readthedocs.org/en/latest/installation/…
A-Dubb

4
다시 생각하면 이렇게하면 중대한 문제가 발생할 것입니다. 이 파일을 보관하지 마십시오. 자세한 내용은 브루 닥터에게 문의하십시오 (Mac OS X에서 homebrew를 사용한다고 가정).
A-Dubb

1
이 파일을 이와 같이 유지하면 Python이 /가 루트 Python 라이브러리 디렉토리로 간주되어 다른 새 패키지를 설치하려고하면 혼란스러운 문제가 발생합니다.
rogueleaderr

6

의견에서 언급했듯이 허용 된 답변 (아마도 유전자가있는 @gotgenes의 답변)은 예기치 않은 결과를 초래할 수 있습니다.

@rogeleaderr는 "이 파일을 이렇게 유지하면 파이썬이 /가 루트 파이썬 라이브러리 디렉토리라고 생각하게하여 다른 새 패키지를 설치하려고하면 혼란스러운 문제가 발생합니다."라고 말합니다.

@gotgenes가 권장하는대로 새 구성 파일을 작성하는 대신 다음 --prefix= 과 같이 명령 줄 의 옵션으로 (등호 오른쪽에 텍스트 없음 )을 추가하는 것이 더 좋습니다 .

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

5

다른 사람의 시간을 절약하기 위해 게시하는 중 ...

일부 환경에서 --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/*


0

간단히 실행할 수 있으며 pip install --user .접두사 인수가 필요하지 않습니다.

pip가 Python 3을 사용하도록 구성된 경우 기본적으로 python3으로 설정되기 때문에 더 좋습니다. (입력하는 것을 잊었고 python3 setup.py2.7에서 3 전용 패키지를 설치했습니다)

(크레딧 https://stackoverflow.com/a/1550235/4364036 )


0

나는 같은 문제가 있었다. 다음 ~/.config/pip/pip.conf과 같이 내부에 숨겨져 있습니다 .

[global]
target=/foo/bar

이러한 구성은 내가 알지 못하는 사이에 타사 스크립트에 의해 생성되었습니다.

pip 구성 파일을 확인하고 target=/foo/bar옵션을 제거하는 것이 좋습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.