pip를 사용하여 Python 패키지를 다른 디렉토리에 설치 하시겠습니까?


435

명백한 대답은 virtualenv와 virtualenvwrapper를 사용하는 것임을 알고 있지만 여러 가지 이유로 나는 그것을하고 싶지 않습니다.

명령을 어떻게 수정합니까?

pip install package_name

pip기본 이외의 패키지 를 설치하려면 site-packages?



2
이제 두 번째 질문 : 사용자 정의 디렉토리에 이미 설치하는 경우 사용자 정의 pip가 아닌 디렉토리에서 이전 버전을 제거하지 않는 방법 . 예를 들어, 쓰기 권한이없는 시스템 전체의 것입니다. 지금까지 나는 이것을 가지고 이걸 뽑아 냈습니다 easy_install.
Tomasz Gandor

2
@TomaszGandor --ignore-installed옵션을 사용하면 pip가 이미 설치된 패키지를 제거하지 못하게해야 한다고 생각 합니다.
Piotr Dobrogost

죄송합니다. pip를 처음 사용하지만 귀하의 질문은 "pi를 다른 버전의 python에 설치하는 방법"과 같은 질문입니까? 파이썬 3.4와 3.5가 있지만 pip 설치가 파이썬 3.5로 가고 싶습니다.
Charlie Parker

@Charlie Nope, 다른 질문. 설치 / 의도에 대해서는 잘 모르지만 일반적으로 virtualenvwrapper를 사용하고 다음과 같은 가상 환경을 만들 것입니다.mkvirtualenv --python=/usr/bin/python3.5 env_name
Monika Sulik

답변:


334

사용하다:

pip install --install-option="--prefix=$PREFIX_PATH" package_name

--ignore-installed이 새로운 접두사를 사용하여 모든 종속성을 강제로 다시 설치하는 데 사용할 수도 있습니다 . --install-option여러 번 사용 하여 사용할 수 있는 옵션을 추가 할 수 있습니다 python setup.py install( --prefix아마도 원하는 것이지만 사용할 수있는 옵션이 많이 있습니다).


5
이 작업을 수행하는 경우 pip freeze대체 디렉토리를 볼 수있는 방법이 있습니까?
Russ

7
핍 동결은 경로를 확인하므로, 만약 당신이 좋아 PYTHONPATH=$PREFIX_PATH/lib/python2.6/site-packages pip freeze한다면 그것들을보아야합니다.
Ian Bicking

4
사용하면 --prefix=$PREFIX_PATH시스템 특정 접미사가 추가되어 ( \Lib\site-packages예를 들어 Windows에서) 설치 디렉토리를 완전히 제어 할 수없는 것 같습니다 . 특정 디렉토리를 지정하는 방법이 있습니까?
Piotr Dobrogost 2016 년

1
@ Piotr : 예 내 대답이 있습니다. '-접두사'를 사용하는 것은 다소 거칠지 만 순수한 파이썬이 /usr/local/lib/pythonX.Y/site- 대신 /usr/lib/pythonX.Y/site-packages 아래로 가고 싶다면 잘 작동합니다. 패키지.
Anthon

80
4 년 전 나쁜 대답은 아니지만 --target 옵션이 현재 존재합니다.
Tritium21

545

--target 스위치는 당신이 찾고있는 것입니다 :

pip install --target=d:\somewhere\other\than\the\default package_name

그러나 당신은 여전히 추가 할 필요 d:\somewhere\other\than\the\defaultPYTHONPATH실제로 위치에서 사용할 수 있습니다.

-t, --target <dir> <dir>에
패키지를 설치하십시오. 기본적으로 이것은 <dir>의 기존 파일 / 폴더를 대체하지 않습니다.
<up>의 기존 패키지를 새 버전으로 바꾸려면 --upgrade를 사용하십시오.


대상 스위치를 사용할 수없는 경우 pip를 업그레이드하십시오.

Linux 또는 OS X에서 :

pip install -U pip

Windows에서 ( 문제가 해결됩니다 ) :

python -m pip install -U pip

8
@DanH 실행 pip install --upgrade pip!
r3m0t

16
이것은 정답입니다. 수락 된 답변 후에 옵션이 약간 추가되었습니다.
bukzor

5
--install-option="--prefix=$PREFIX_PATH"@Ian Bicking과 --target=$PATH옵션 의 차이점은 무엇입니까 ?
Hibou57

6
targetpip 옵션이며 입력 한 모든 항목이에 install-option전달됩니다 setup.py install command. 기본적 target으로 사용자 정의 사이트 패키지 위치입니다.
Janusz Skonieczny

10
사용 --target이 지정된 접두사의 모든 포함 스크립트 / 데이터 파일을 설치하지 않습니다 때문에, 부분적으로 설치 될 수 있습니다. 그것은 지나가는 것 같아 --prefix함께 --install-option사용 된 설치가 접두사를 완벽하게 제어 할 수있는 유일한 올바른 방법입니다.
Kenneth Hoste

74

--target옵션 또는 옵션 대신 https://github.com/pypa/pip/issues/446--install-options 에서이 문제에 관한 버그에 대한 토론에서 다음이 잘 작동한다는 것을 알았습니다 .

PYTHONUSERBASE=/path/to/install/to pip install --user

(또는이 설정 PYTHONUSERBASE을 사용하여 명령을 실행하기 전에 사용자 환경에서 디렉토리 export PYTHONUSERBASE=/path/to/install/to)

이것은 매우 유용하게 사용 --user옵션을하지만, 할을 알려줍니다 bin, lib, share당신이 아닌 사용자 정의 접두사에서 기대와 다른 디렉토리를 $HOME/.local.

그럼 당신은 당신이를 추가 할 수 있습니다 PATH, PYTHONPATH당신을 일반 설치 디렉토리로 및 기타 변수.

시스템 제공 버전을 무시 하기 위해이 패키지가 종속 된 패키지가 디렉토리 에 최신 버전을 설치해야하는 경우 --upgrade--ignore-installed옵션 을 지정해야 할 수도 있습니다 PYTHONUSERBASE.

전체 예 :

PYTHONUSERBASE=/opt/mysterypackage-1.0/python-deps pip install --user --upgrade numpy scipy

..to를 설치 scipy하고 numpy당신이 다음에 포함 할 수있는 디렉토리에 최신 버전의 패키지 PYTHONPATH같은 (사용 bash는이 예에 CentOS 6에 파이썬 2.6을) :

export PYTHONPATH=/opt/mysterypackage-1.0/python-deps/lib64/python2.6/site-packages:$PYTHONPATH
export PATH=/opt/mysterypackage-1.0/python-deps/bin:$PATH

virtualenv를 사용하는 것이 여전히 더 좋고 깔끔한 솔루션입니다!


4
이것은 Docker 컨테이너에서 실행되는 Travis CI와 함께 작동했지만 --install-option = "-prefix = $ PREFIX_PATH"솔루션은 그렇지 않았습니다.
32 비트

1
Noobie 질문, /binpip 폴더 가 얼마나 중요한지 , 그렇지 않은 --user것처럼 만듭니다 . --PREFIX--target
Jonathan

1
패키지가 전역 Python으로 설치되어 있으면 --ignore-installed필요합니다.
George Sovetov

1
이 옵션은 --editable로컬 설치 와도 호환 됩니다.
mdh

1
이 옵션은 루트가 아닌 다른 사용자를 위해 수퍼 유저로 패키지를 설치하는 데 편리합니다 su(예 : 컨테이너에 문제가있을 수 있음).
mdh

43

파이썬 패키지 설치에는 종종 순수한 파이썬 파일 만 포함됩니다. 패키지에 데이터, 스크립트 및 / 또는 실행 파일이 포함 된 경우 순수 Python 파일과 다른 디렉토리에 설치됩니다.

패키지에 데이터 / 스크립트 / 실행 파일이없고 파이썬 파일을 /python/packages/package_name(및 사용할 /python/packages때와 같은 몇 가지 하위 디렉토리가 아닌) 원하는 것으로 가정하면 --prefixone time 명령을 사용할 수 있습니다.

pip install --install-option="--install-purelib=/python/packages" package_name

패키지의 전부 (또는 대부분)를 원하는 경우 다음 ~/.pip/pip.conf을 포함하도록 편집 할 수 있습니다.

[install]
install-option=--install-purelib=/python/packages

그렇게하면 반복해서 지정할 필요가 없습니다.

추가 설치 옵션 ( --prefix/ --install-data/ --install-scripts등)을 지정하지 않으면 패키지에 포함 된 모든 실행 파일 / 데이터 / 스크립트가 기본 위치로 이동합니다 ( 자세한 내용은 사용자 정의 설치 옵션 참조).


1
구성 파일의 큰 장점. --prefix홈 디렉토리의 공유 서버에 "로컬"디렉토리가 있고 easy_install로 이동하기 전에 접두사로 사용 되었기 때문에 개인적으로 거기를 지정합니다 pip. 시스템 $PATH$PYTHONPATH이전에 구성되었습니다. install-option=--install-purelib=/blah이 새로운 target=/blah옵션 / 스위치 대신에 . 그것은 또한 좋은, 그러나 때때로 당신은 단지 교체가 필요 --prefix당신이 사용하는 거라고, setup.pyeasy_install.
Tomasz Gandor


18

-t 옵션을 언급 한 사람은 없지만 가장 쉬운 방법은 다음과 같습니다.

pip install -t <direct directory> <package>

8
-t옵션의 짧은 버전입니다 --target다른 답변 (에 설명 된 옵션 stackoverflow.com/a/19404371/594053 :)
MattiSG

14

@Ian Bicking의 답변에 한 점을 추가하십시오.

은 Using --user하나가 원격 서버 (sudo는 사용자 권한없이) 자신의 홈 디렉토리에 일부 파이썬 패키지를 설치하고자하는 경우에도 작업을 설치된 디렉토리를 지정하는 옵션을 선택합니다.

예 :

pip install --user python-memcached

이 명령은 PYTHONPATH에 나열된 디렉토리 중 하나에 패키지를 설치합니다.


14

python3.5 및 pip 9.0.3으로 이러한 옵션을 테스트했습니다.

pip install --target / myfolder [패키지]

/ myfolder 아래에 종속성을 포함한 모든 패키지를 설치합니다. 종속 패키지가 이미 Python의 다른 곳에 설치되어 있음을 고려하지 않습니다. / myfolder / [package_name]에서 패키지를 찾을 수 있습니다. Python 버전이 여러 개인 경우에는이를 고려하지 않습니다 (패키지 폴더 이름에 Python 버전 없음).

pip install --prefix / myfolder [패키지]

확인은 이미 설치된 종속성입니다. /myfolder/lib/python3.5/site-packages/[packages]에 패키지를 설치합니다

pip install --root / myfolder [패키지]

--prefix와 같은 종속성을 확인하지만 설치 위치는 /myfolder/usr/local/lib/python3.5/site-packages/[package_name]입니다.

pip install --user [패키지]

$ HOME에 패키지를 설치합니다 : /home/[USER]/.local/lib/python3.5/site-packages 파이썬은이 .local 경로에서 자동으로 검색하므로 PYTHONPATH에 넣을 필요가 없습니다.

=> 대부분의 경우 --user가 가장 적합한 옵션입니다. 어떤 이유로 홈 폴더를 사용할 수없는 경우 --prefix.


Python 2.7.16에서 실행되는 --target (또는 --prefix)는 Jinja2-2.10.1.dist-info /를 설치하는 반면 install --install-option = "-prefix는 Jinja2-2.10.1-py2를 설치합니다. .7.egg-정보는 /, 내가 실제로 원했던 인
그렉 도허티

13

최신 버전 pip(8 이상)은 다음 --prefix옵션을 직접 사용할 수 있습니다 .

pip install --prefix=$PREFIX_PATH package_name

여기서 $PREFIX_PATHlib, bin 및 기타 최상위 폴더가있는 설치 접두사입니다.


10
pip install packageName -t pathOfDirectory

또는

pip install packageName --target pathOfDirectorty

4

쓰기 권한이 없을 때 IPython을 설치하는 데 문제가 있었으므로 이미 좋은 조언을 추가하려면/usr/local .

pip는 distutils를 사용하여 설치를 수행하며이 스레드sys.prefix설정 에 따라 문제가 발생할 수있는 방법에 대해 설명합니다 .

IPython 설치가 Permission denied 로 '/ usr / local / share / man / man1'에 쓰려고 할 때 문제가 발생했습니다 . 설치가 실패함에 따라 bin 디렉토리에 IPython 파일을 쓰지 않는 것 같습니다.

"--user"를 사용하여 파일을 ~ / .local에 썼습니다. $ PATH에 ~ / .local / bin을 추가하면 거기에서 "ipython"을 사용할 수 있습니다.

그러나 많은 사용자를 위해 이것을 설치하려고하는데 /usr/local/lib/python2.7디렉토리 에 대한 쓰기 권한이 부여되었습니다 . 아래에 "bin"디렉토리를 만들고 distutils에 대한 지시문을 설정했습니다.

vim ~/.pydistutils.cfg

[install]
install-data=/usr/local/lib/python2.7
install-scripts=/usr/local/lib/python2.7/bin

그런 다음 ( -I이전 실패 /.local 설치에도 불구하고 강제 설치에 사용됨) :

pip install -I ipython

그런 다음에 추가 /usr/local/lib/python2.7/bin했습니다 $PATH.

다른 사람이 sudo 액세스 권한이없는 컴퓨터에서 비슷한 문제가있는 경우를 대비하여 이것을 포함한다고 생각했습니다.


2

불행히도 python과 함께 brew를 사용하는 경우 pip / pip3에는 매우 제한된 옵션이 제공됩니다. 위에서 언급 한대로 --install-option, --target, --user 옵션이 없습니다.

pip install --user에
대한 참고 사항 일반적인 pip install --user는 추출 된 Python에 대해 비활성화되어 있습니다. 이는 Homebrew가 패키지 접두사를 설정하는 distutils.cfg를 작성하기 때문에 distutils의 버그 때문입니다. 실행 가능한 스크립트를 ~ / Library / Python /./ bin에 넣는 가능한 해결 방법은 다음과 같습니다. python -m pip install --user --install-option="--prefix=" <package-name>

이 라인은 매우 번거로울 수 있습니다. 관리를 위해 pyenv를 사용하는 것이 좋습니다. 당신이 사용하는 경우

brew upgrade python python3

아이러니하게도 실제로 pip 기능을 다운 그레이드 합니다.

(Mac OSX의 pip에 --target 옵션이 없기 때문에이 답변을 게시하고 수정하는 데 몇 시간을 보냈습니다)


명백한 접두사를 가진이 대답은 ignore-installed이전의 노력으로 저에게 python -m pip install --user --install-option="--prefix='/myFunkyApp/lib'" --ignore-installed <package-name>
Jeremy Jones

0

v1.5.6Python에서 pip v2.7.3(GNU / Linux) --root를 사용하면 옵션을 사용하면 특정 패키지 옵션에 관계없이 전역 설치 접두사를 지정할 수 있습니다. Fi를 사용해보십시오.

$ pip install --root=/alternative/prefix/path package_name

0

설명서를 따르고 ~ / .pip / pip.conf 파일을 만드는 것이 좋습니다. 문서에서 지정된 헤더 디렉토리가 누락되어 다음과 같은 오류가 발생합니다.

error: install-base or install-platbase supplied, but installation scheme is incomplete

conf 파일의 전체 작업 내용은 다음과 같습니다.

[install]
install-base=$HOME
install-purelib=python/lib
install-platlib=python/lib.$PLAT
install-scripts=python/scripts
install-headers=python/include
install-data=python/data

불행히도 설치할 수는 있지만 pip를 제거하려고하면 제거 프로세스에 해당 패키지가 없다고 알려줍니다 .... 무언가 여전히 잘못되었지만 패키지가 사전 정의 된 위치로 이동합니다.


0

pip install /path/to/package/

이제 가능합니다.

이것과 -e또는 --editable플래그를 사용하는 것의 차이점 -e은 패키지를 파이썬 경로에 설치하지 않고 패키지가 저장된 위치 (예 : 다운로드 폴더)에 대한 링크입니다.

즉, 패키지를 다른 폴더로 삭제 / 이동하면 사용할 수 없습니다.


이 질문에 대답하지 않습니다
Clintm

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