[python] “pip install –user…”의 목적은 무엇입니까?

보낸 사람 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에 실행 파일을 넣지 않겠습니까?



답변

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

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


답변

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

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

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


답변

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

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

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


답변

단지 경고 :

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

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


답변

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

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


답변

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) 기능은 또한 사용자가 시스템 종속 라이브러리를 변경하지 못하도록 보호하는 것 같습니다.

-전자


답변

가상 환경없이

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.