“pip install --user…”의 목적은 무엇입니까?


189

보낸 사람 pip install --help:

 --user      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
             Windows. (See the Python documentation for site.USER_BASE for full details.)

site.USER_BASE에 대한 문서는 내가 이해하지 못하는 흥미로운 * NIX 주제의 끔찍한 웜홀입니다.

--user일반 영어 의 목적은 무엇입니까 ? 왜 패키지를 설치해야 ~/.local/합니까? 왜 $ PATH에 실행 파일을 넣지 않겠습니까?


2
import site; print site.USER_SITE설치 위치를 인쇄 할 수 있습니다. 나를 위해 나는 얻었다 /${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages.
Trevor Boyd Smith

1
호스트 시스템에서 pip로/usr/local/lib/pythonX.X/dist-packages 설치된 패키지의 기본 디렉토리입니다 . 그러나 한 사용자가 사용자 별 패키지를 설치하려면을 사용할 수 있습니다 . 이 패키지는 그룹 및 해당 호스트에 액세스하는 다른 사람이 사용할 수없는 상태로 유지됩니다. $ sudo pip3 --user install some_package
noobninja

답변:


223

pip는 기본적으로 Python 패키지를 시스템 디렉토리 (예 :)에 설치합니다 /usr/local/lib/python3.4. 루트 액세스가 필요합니다.

--user 대신 홈 디렉토리에 pip 설치 패키지를 만들므로 특별한 권한이 필요하지 않습니다.


1
감사; 말이 되네요 그러나 --user패키지를 루트로 실행하지 않는 것이 중요합니까? (그룹 액세스 정책을 설정하기 위해 Wireshark / kismet / burpsuite 옵션과 유사한 것을 상상하여 모든 프로그램 기능이 루트로 실행되는 것을 허용하지 않습니다. 또는 올바른 --user옵션 입니까?) 루트 권한없이 설치 를 허용 하려면? 이 경우 왜 사용하지 sudo pip install foo_package않습니까? pip를 통해 설치하기 위해 루트 권한이 필요하지 않았습니다.
Rob Truxal

12
@Rob Truxal. 요점은 다른 사용자가 패키지를 볼 수 없다는 것입니다. 어쩌면 이전 / 새 버전의 패키지를 원할 수도 있지만 시스템에 패키지를 설치하면 작업 동료를 망칠 것입니다.
NDEthos

4
오! --userPARAM은 사용자 격리에 관한 것입니다! 그것은 어리석은 말이됩니다. 감사합니다 @ NDEthos!
Rob Truxal

좋아, 여기에 (noobish) 질문이 있습니다 : 내가 사용자 foo로 로그인 한 다음이 명령 pip install --user -r requirements.txt ..를 실행하고 모든 것이 제대로 설치되었다고 가정하십시오. 그런 다음 사용자 표시 줄로 로그인하고 다음과 같이 파이썬 프로그램을 실행했습니다 : sudo -u foo ./odoo-bin .. foo 사용자를 위해 설치된 파이썬 패키지에서 읽을 수 있습니까? 또는 어떻게 작동합니까?
abbood

1
현재 사용자에게 설치된 패키지 만 나열하는 방법이 있습니까? 즉 pip freeze --user?
abbood

24

--user에 설치합니다 site.USER_SITE.

내 경우에는이었다 /Users/.../Library/Python/2.7/bin. 그래서 ~/.bash_profile파일에 PATH에 추가했습니다 .

export PATH=$PATH:/Users/.../Library/Python/2.7/bin

15

다른 답변 site.USER_SITE에는 Python 패키지가 배치되는 위치가 언급 되어 있습니다. 바이너리를 찾고 있다면 들어갑니다.{site.USER_BASE}/bin .

이 디렉토리를 쉘의 검색 경로에 추가하려면 다음을 사용하십시오.

export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"

14

단지 경고 :

에 따르면 이 문제 , --user현재 가상 ENV의의 내부 유효하지 않습니다pip 사용자 위치가 정말 가상 환경에 대한 이해가되지 않기 때문이다.

따라서 pip install --user some_pkg 가상 환경 내부에서 사용하지 마십시오 . 그렇지 않으면 가상 환경 pip이 혼동됩니다. 자세한 내용은 이 답변 을 참조하십시오.


11

가장 좋은 방법은 설치 virtualenv이며 --user혼란을 요구하지 않습니다 . 패키지를 설치할 때마다 더 많은 유연성을 얻고 다른 파이썬 버전과 프로젝트를 클로버 링 할 염려가 없습니다.

https://virtualenv.pypa.io/en/stable/


8

macOS에서 --user플래그 를 사용하는 이유 는 OS가 의존하는 라이브러리를 손상시키지 않기위한 것입니다. 보수적 많은 맥 OS 사용자를위한 접근 방식은 설치하거나 필요로하는 명령을 핍 업데이트 방지하는 것입니다 sudo. 따라서 여기에는/usr/local/bin ...

참조 : Neovim 용 Python 설치 ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim )

나는 아니에요 모두 에 설치하는 이유를 취소 /usr/local/bin시스템은 파이썬에서 바이너리에 의존한다는 사실 주어진 Mac에서 위험 /Library/Frameworks/하고 /usr/bin. 나는 위에서 언급 한대로,로를 설치하는 것이 있기 때문에 용의자 /usr/local/bin가 필요 sudo시스템 라이브러리와 비용이 많이 드는 실수로 문을 열고있다. 따라서 설치 ~/.local/bin는 이러한 위험을 피할 수있는 확실한 방법입니다.

참조 : Mac에서 파이썬 사용하기 ( https://docs.python.org/2/using/mac.html )

마지막으로, 정도에에 패키지를 설치하는 이점이 /usr/local/bin그것에서 디렉토리의 소유자를 변경하는 것이 취하면, 궁금 root로를 user? 이렇게하면 sudo시스템 종속적 인 변경을 방지하면서 사용하지 않아도 됩니다. * 이것이 보안 기본값이 과거에 (서버로) Unix 시스템이 더 자주 사용 된 방식의 유물입니까? 아니면 최소한 서버를 호스팅하지 않는 Mac 사용자를위한 좋은 방법일까요?

* 참고 : Mac의 시스템 무결성 보호 (SIP) 기능은 또한 사용자가 시스템 종속 라이브러리를 변경하지 못하도록 보호하는 것 같습니다.

-전자


8

가상 환경없이

pip <command> --user 시스템 전체 패키지 설치 위치가 아닌 현재 사용자 계정의 로컬 파이썬 패키지 설치 위치에서 작동하도록 현재 pip 명령의 범위를 변경합니다.

이것은 실제로 다중 사용자 컴퓨터에서만 중요합니다. 시스템 위치에 설치된 모든 항목은 모든 사용자가 볼 수 있으므로 사용자 위치에 설치하면 해당 패키지 설치가 다른 사용자와 분리되어 유지됩니다 (표시되지 않으며 사용하려면 별도로 설치해야 함). 버전 충돌이있을 수 있으므로 다른 패키지에 필요한 종속성이있는 패키지를 설치하면 문제가 발생할 수 있으므로 지정된 사용자가 사용하는 모든 패키지를 시스템 설치 위치로 푸시하지 않는 것이 가장 좋습니다.

  • 단일 사용자 시스템 인 경우 해당 --user위치 에 설치하는 것과 거의 차이가 없습니다 . 패키지와 패키지 사용 방법에 따라 다른 폴더에 설치되며 경로에 추가해야 할 수도 있고 필요하지 않을 수도 있습니다 (많은 패키지는 셸에서 실행하려면 경로에 있어야하는 명령 줄 도구를 설치합니다) .
  • 다중 사용자 시스템 인 --user경우 관리자가 기본적으로 모든 사용자가 사용할 수있는 일반 패키지의 경우를 제외하고 루트 / 스도를 사용하거나 관리자 설치가 필요하고 모든 사용자의 Python 환경에 영향을주는 것이 좋습니다.
    • 참고 : 대부분의 유닉스 / 리눅스 설치에서는 시스템 설치시 일반 패키지 관리자 (예 : apt대신)를 사용해야한다는 의견 이 pip있습니다.

가상 환경

--user활성 venv / virtualenv 환경 의 옵션은 로컬 사용자 파이썬 위치에 설치됩니다 (가상 환경이없는 것과 동일).

패키지는 기본적으로 가상 환경에 설치되지만 사용 --user하면 가상 환경 외부의 사용자 python 스크립트 디렉토리 (Windows의 경우 현재 c:\users\<username>\appdata\roaming\python\python37\scriptsPython 3.7)에 설치됩니다.

그러나 가상 환경 --user에서 사용한 경우에도 가상 환경 내에서 시스템 또는 사용자 설치에 액세스 할 수 없습니다 .

--system-site-packages인수 를 사용하여 가상 환경을 설치하면 Python의 시스템 스크립트 폴더에 액세스 할 수 있습니다. 여기에는 사용자 파이썬 스크립트 폴더도 포함되어 있다고 생각하지만 확실하지 않습니다. 그러나 의도하지 않은 결과가 발생할 수 있으며 가상 환경을 사용하는 것은 아닙니다.


Python 시스템 및 로컬 사용자 설치 폴더의 위치

을 사용하여 python의 사용자 설치 폴더 위치를 찾을 수 있습니다 python -m site --user-base. Q & A, 설명서 및 PC에서 기본값이 무엇인지에 대해 실제로이 명령을 사용하여 충돌하는 정보를 찾고 있지만 사용자 홈 디렉토리 ( ~* nix의 단축 키, c:\users\<username>일반적으로 Windows의 경우) 아래에 있습니다.


기타 세부 사항

--user옵션이 모든 명령에 유효한 것은 아닙니다. 예를 들어 pip uninstall패키지가 설치된 위치 (사용자 폴더, 가상 환경 폴더 등)를 찾아서 제거하며 --user옵션이 유효하지 않습니다.

설치된 항목 pip install --user은 현재 사용자 계정에서만 볼 수있는 로컬 위치에 설치되며 루트 액세스 (* nix) 또는 관리자 액세스 (Windows)는 필요하지 않습니다.

--user옵션 은 사용자 설치 폴더에서 보거나 조작하기 위해이를 수락하는 모든 pip 명령을 수정 하므로, 사용 pip list --user하는 경우로 설치된 패키지 표시됩니다 pip install --user.


1
첫 번째 부분을 표현해 보시겠습니까? 파이썬 가상 환경 밖에서 pip install--user완전히 사용 하지 않는 것이 가장 좋습니다 . 이렇게하면 시스템 패키지 관리자에게 맡겨야 할 곳에 파이썬 패키지가 설치됩니다 (예 apt: 데비안 / 우분투). 이것을 망치지 않는 것이 좋습니다. 이렇게하면 많은 문제가 발생합니다. 모든 사용자가 Python 패키지를 사용할 수 있어야하는 경우 운영 체제의 패키지 관리자를 사용하십시오 sudo pip install .... 대안은 sudo pip install --target ...입니다. Windows에서는 문제가 적습니다.
sinoroc

좋아-당신은 '가상 환경없이'섹션에서 마지막 글 머리의 후반을 의미합니까? 그렇지 않은 경우 특정 부품은 무엇입니까? (이 업데이트를 위해 직접 편집 할 수 있습니다. 저는 주로 * nix 사용자가 아닙니다)
LightCC

Windows를 사용하지 않으면 nuget 과 같은 것을 사용하지 않으면 실제로 중앙 집중식 패키지 관리자가 없기 때문에 걱정할 필요가 없습니다 . 답을 수정하기 위해 찾아올 수 있는지 살펴 보겠습니다.
sinoroc

@sinoroc 나는 그 단락에 메모를 추가했습니다. 보다 정확한 단어 등으로 업데이트하거나 비슷한 문구가 있으면 다른 곳에서 편집하십시오.
LightCC

1

내 $ PATH 어딘가에 실행 파일을 넣지 마십시오.

~/.local/bin directory이론적 으로 귀하의 것으로 예상됩니다 $PATH.

에 따르면, 이 사람들 이 버그의 에 추가하지 $PATH사용하는 경우 systemd.

이 답변은 더 광범위하게 설명합니다.

그러나 배포판에에 대한 디렉토리 포함되어 있어도 다음과 같은 형식 일 수 있습니다 .~/.local/bin$PATH~/.profile

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

당신이 필요로하는 로그인을 다시 로그 아웃 및 디렉토리가 이전에하지가 있다면.

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