2011-08-22 3 views
271

가능합니까? pip을 설치할 때, 내 $HOME 폴더 안에 python 패키지를 설치하십시오. (예를 들어, 나는 pip를 사용하여, mercurial를 설치하기를 원하지만 $HOME 대신 /usr/local의 내부에) 내가 대신 "오염"의, 맥 컴퓨터와 함께 해요 그냥이 가능성에 대해 생각

/usr/local, 내을 사용 대신 $HOME

PEP370 정확히 이에 대한 것입니다. ˜/.local을 생성하고 pip install package으로 충분하여이 패키지를 $ HOME 폴더에만 설치할 수 있습니까?

+0

virtualenv를 확인한 적이 있습니까? 격리 된 환경에서 pip로 패키지를 설치할 수 있습니다. – joet3ch

+2

필자는 그것에 대해 생각했지만 파이썬 응용 프로그램을 기존의 Python (2.6.1)을 사용하여 설치하고 싶지만/usr/local /에 설치하는 대신 $ HOME 폴더에 설치하고 $ PATH에 추가하십시오. 가능한지, 그리고이 접근법의 모든주의 사항을 알고 싶습니다. –

+10

+1 PEP370을 홍보하는 데 +1. 이것은 더 많은 사람들이 알아야 할 간단하지만 유용한 옵션입니다. –

답변

380

virtualenv을 사용할 수 있지만 필요하지는 않습니다. 트릭은 setup.py 스크립트에 PEP370 --user 인수를 전달하는 것입니다. pip의 최신 버전으로, 그것을 할 수있는 한 가지 방법은 다음과 같습니다

pip install --user mercurial 

$HOME/.local/bin/hg에 설치되는 hg 스크립트와 $HOME/.local/lib/pythonx.y/site-packages/의 HG 패키지의 나머지 초래한다.

위의 내용은 Python 2.6에서도 마찬가지입니다. Python 코어 개발자 중에 bit of controversy이있어 Mac OS X에서 PEP370 스타일 user 설치에 적합한 디렉토리 위치가 무엇인지에 대해 설명합니다. Python 2.7 및 3.2에서 Mac OS X의 위치는 $HOME/.local에서 $HOME/Library/Python으로 변경되었습니다. 이것은 향후 릴리스에서 변경 될 수 있습니다. 그러나 현재 2.7 (및 3.2, Python 3에서 hg이 지원되는 경우) 위의 위치는 $HOME/Library/Python/x.y/bin/hg$HOME/Library/Python/x.y/lib/python/site-packages입니다.

+0

좋은 지적. 불행히도 Python 2.7에는 PYTHONUSERBASE가 OS X 프레임 워크 빌드에서 무시되는 버그가 있습니다. Python 2.7.3에서 수정 될 예정입니다. –

+1

이것은 매우 흥미로운 것 같습니다. 'easy_install'은 기본적으로 Mac OS X에 설치되어 있으므로'$ HOME' 폴더 밖에 pip가 설치되지 않습니다. –

+0

나의 Snow Leopard와 함께 제공되는'easy_install'은'/ Library/Python/2.6/site-packages/pip-1.0.2-py2.6.egg'에'pip'를 설치합니다. 'which pip'는'/ usr/local/bin/pip'을 보여줍니다. '--user' 인수와 pip로''hg'는'$ HOME/.local/bin/hg'!를 보여줍니다. (나는 $ HOME/.local/bin을'$ PATH'에 추가하여 작동하도록했다.) –

18

나는 당신의 홈 디렉토리에서 virtualenv를 사용할 것이다. 쉘은 pip|python|easy_install 기본적으로 사용되는 것이라고 다음 PATH에 ~/빈을 추가 할

$ sudo easy_install -U virtualenv 
$ cd ~ 
$ virtualenv . 
$ bin/pip ... 

그런 다음 마우스 오른쪽 중 ~/.(login|profile|bash_profile)을 변경할 수 있습니다.

+6

* "사실상"*하는 방법은'virtualenv venv','source venv/bin/activate'입니다. 반드시 ** 항상 ** virtualenv를 사용하고 싶지 않을 수도 있습니다.이 방법을 사용하면 프롬프트를 접두사 앞에'(venv) '를 붙입니다. – nyuszika7h

+2

@ nyuszika7h 우리는 virtualenv 사용법을 알고 있습니다. 그러나 이것은 정말로 질문에 답하고 매우 청초한 해결책입니다. – itsafire

+5

@itsafire "우리"는 누구입니까? https://en.wikipedia.org/wiki/Weasel_word – nyuszika7h

관련 문제