DistutilsOptionError: home 또는 prefix/exec-prefix 중 하나를 제공해야 합니다. 둘 다 제공하지 않습니다.
저는 주로 pip을 통해 python 패키지를 설치해왔습니다.
Google App Engine의 경우 다른 대상 디렉터리에 패키지를 설치해야 합니다.
시도해 봤습니다.
pip 설치 - I flask-restful --target ./lib
하지만 다음과 같은 오류가 발생합니다.
홈 또는 접두사/exec-prefix 중 하나를 제공해야 합니다. 둘 다 제공하지 않습니다.
어떻게 하면 이것을 작동시킬 수 있을까요?
당신은 OS X와 홈브루를 사용하고 있습니까?Homebrew python 페이지 https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md 에서는 pip 및 해결 방법에 대한 알려진 문제를 설명합니다.
나를 위해 일했습니다.
다음 내용을 포함하는 ~/.pydistutils.cfg 파일을 추가하여 이 "빈 접두사"를 기본값으로 설정할 수 있습니다.
[install] prefix=
편집: 홈브루 페이지는 나중에 통과를 권장하도록 변경되었습니다.--prefix
아래 주석에서 설명한 대로 명령줄에 있습니다.다음은 해당 텍스트가 포함된 마지막 버전입니다.불행하게도 이것은 바퀴가 아닌 sdist에게만 효과가 있습니다.
이 문제는 나중에 수정된 pip에 보고되었습니다.이것이 아마도 그 섹션이 홈브루 페이지에서 제거된 이유일 것입니다.그러나 위 질문과 같이 사용할 때는 여전히 문제가 발생합니다.
저는 이 문제에 대한 간단한 해결책이 있다고 생각합니다. (맥OS의 홈브루 파이썬) 정상적인 pip 작업을 중단시키지 않을 것입니다.
당신이 해야 할 일은 다음을 만드는 것입니다.setup.cfg
프로젝트의 루트 디렉터리에 있는 파일(일반적으로 주 디렉터리)__init__.py
또는 실행 가능한 py 파일입니다.따라서 프로젝트의 루트 폴더가 다음과 같은 경우:/path/to/my/project/
을 생성합니다.setup.cfg
거기에 줄을 치고 마법의 단어들을 넣으십시오.
[install]
prefix=
이제 해당 폴더에 대해 pip의 명령을 실행할 수 있습니다.
pip install package -t /path/to/my/project/
이 명령은 해당 폴더에 대해서만 정상적으로 실행됩니다.그냥 복사setup.cfg
당신이 가지고 있을 수 있는 다른 프로젝트들.작성할 필요 없음.pydistutils.cfg
홈 디렉토리에 있습니다.
모듈을 설치한 후에는 제거할 수 있습니다. setup.cfg
.
OSX(mac)에서 /var/myproject라는 프로젝트 폴더를 가정합니다.
cd /var/myproject
- 다음 파일을 만듭니다.
setup.cfg
추가[install] prefix=
- 달려.
pip install <packagename> -t .
홈브루 사용자를 위한 또 다른 솔루션*은 단순히 다음을 사용하는 것입니다.virtualenv
.
물론, 그것은 어쨌든 대상 디렉토리의 필요성을 제거할 수도 있습니다. 하지만 그렇지 않다고 해도, 저는 그것을 찾았습니다.--target
가상 환경에서는 구성 파일을 생성/제거하지 않고 기본적으로 작동합니다.
*저는 해결책을 말합니다; 아마도 그것은 venvs를 꼼꼼하게 사용하기 위한 또 다른 동기일 뿐입니다...
주변의 다른 권장 사항에 오류가 발생했습니다.--install-option="--prefix=lib"
내가 찾은 유일한 효과는 사용하는 것입니다.PYTHONUSERBASE
여기에 기술된 바와 같이
export PYTHONUSERBASE=lib
pip install -I flask-restful --user
이것은 정확히와 같지 않습니다.--target
하지만 어떤 경우에도 저에게는 효과가 있습니다.
다른 언급된 것처럼, 이것은 홈브루와 함께 설치된 pip & python이 있는 알려진 버그입니다.
을 생성하는 ~/.pydistutils.cfg
빈 접두사 명령이 있는 파일은 이 문제를 해결할 수 있지만 일반적인 pip 작동은 중단됩니다.
이 버그가 공식적으로 해결될 때까지 옵션 중 하나는 이 경우를 처리하는 자체 bash 스크립트를 만드는 것입니다.
#!/bin/bash
name=''
target=''
while getopts 'n:t:' flag; do
case "${flag}" in
n) name="${OPTARG}" ;;
t) target="${OPTARG}" ;;
esac
done
if [ -z "$target" ];
then
echo "Target parameter must be provided"
exit 1
fi
if [ -z "$name" ];
then
echo "Name parameter must be provided"
exit 1
fi
# current workaround for homebrew bug
file=$HOME'/.pydistutils.cfg'
touch $file
/bin/cat <<EOM >$file
[install]
prefix=
EOM
# end of current workaround for homebrew bug
pip install -I $name --target $target
# current workaround for homebrew bug
rm -rf $file
# end of current workaround for homebrew bug
이 스크립트는 명령과 다음을 마무리합니다.
- 이름 및 대상 매개 변수를 사용
- 이러한 매개 변수가 비어 있는지 확인합니다.
- 성
~/.pydistutils.cfg
"접두사" 있는 입니다. - 제공된 매개 변수를 사용하여 pip 명령을 실행합니다.
- 거
~/.pydistutils.cfg
이 스크립트는 사용자의 요구사항에 맞게 변경 및 조정할 수 있지만 아이디어가 있습니다.또한 브레이크 파이프 없이도 명령을 실행할 수 있습니다.도움이 되길 바랍니다 :)
를 virtualenv*를 으로 확인하는 .which pip
사용 중입니다.
다음과 같은 것을 본다면,/usr/local/bin/pip
당신은 당신의 환경에서 탈출했습니다.가상 환경을 다시 활성화하면 다음 문제가 해결됩니다.
Env: 가상 환경:$ source bin/activate
가상물기:$ vf activate [environ]
저는 가상 물고기를 사용하지만, 이 팁은 두 가지 모두와 관련이 있다고 생각합니다.
저도 비슷한 문제가 있습니다.--system 플래그를 사용하여 오류를 방지합니다. --system 플래그는 제 상황의 특정 사례를 설명하는 다른 스레드에서 설명합니다.같은 문제에 직면한 모든 사람들에게 도움이 될 것을 기대하며 이 글을 여기에 올립니다.
언급URL : https://stackoverflow.com/questions/24257803/distutilsoptionerror-must-supply-either-home-or-prefix-exec-prefix-not-both
'programing' 카테고리의 다른 글
세 자리 숫자에 대한 열 지도에서 과학적 표기법을 보여주는 Seaborn (0) | 2023.07.16 |
---|---|
Python에서 서로 다른 라인 스타일로 주 그리드라인과 부 그리드라인을 만드는 방법 (0) | 2023.07.16 |
파일이 유효한 이미지 파일인지 확인하는 방법은 무엇입니까? (0) | 2023.07.16 |
파이썬에서 가장 효율적인 문자열 연결 방법은 무엇입니까? (0) | 2023.07.06 |
MongoDb Atlas 서버에 연결하는 중 오류 발생 (0) | 2023.07.06 |