pip 및 python 사용자 패키지를 차단하는 방법

pip 및 python 사용자 패키지를 차단하는 방법

사용자가 pip를 사용하여 홈 디렉터리에 패키지를 설치하는 것을 방지하려고 합니다.

의 출력은 python3 -m site --help슈퍼유저가 사용자 사이트 디렉터리를 비활성화할 수 있음을 나타냅니다. 그런데 이것이 어떻게 이루어지나요? 나는 site.ENABLE_USER_SITEa에서 설정을 시도했지만 sitecustomize.py도움이 되지 않습니다. PYTHONNOUSERSITE=1환경 설정 이나 -sPython으로의 전달은 작동하지만 엄밀히 말하면 슈퍼유저 조정은 아닙니다.

나는 또한 어떻게든 사용자에 대해 pip를 비활성화하여 이에 접근하려고 시도했습니다. 우리는 패키지가 venv 환경에 설치되지만 사용자 홈 디렉토리에는 설치되지 않는다는 점에 매우 만족합니다. 설치를 pip.conf강제로 비활성화하기 위해 넣을 수 있는 것이 있습니까 ?--user

답변1

큐:--user 설치를 강제로 비활성화하기 위해 pip.conf에 넣을 수 있는 것이 있습니까?

ㅏ:아니요. 구성 파일은 다음에 정의된 우선 순위에 따라 항상 재정의될 수 있습니다.핍 문서:

명령줄 옵션은 구성 파일보다 우선하는 환경 변수보다 우선합니다.

큐:슈퍼유저가 사용자 사이트 디렉터리를 비활성화할 수 있습니다. 그런데 이것이 어떻게 이루어지나요? PYTHONNOUSERSITE=1환경 설정 이나 -sPython으로의 전달은 작동하지만 엄밀히 말하면 슈퍼유저 조정은 아닙니다.

ㅏ:나는 정반대를 찾았기 때문에 Google을 통해 이 질문에 이르렀습니다. PYTHONNOUSERSITE실제로 pip의 동작이 변경되는 것을 볼 수 없습니다.

$ docker run --net=host -it python:3.8 bash

$ pip install -U pip
Requirement already up-to-date: pip in /usr/local/lib/python3.8/site-packages (20.2.2)

$ ls -ltr ~/.local
ls: cannot access '/root/.local': No such file or directory

$ PYTHONNOUSERSITE=1 pip install --user typing-extensions
Collecting typing-extensions
  Downloading typing_extensions-3.7.4.3-py3-none-any.whl (22 kB)
Installing collected packages: typing-extensions
Successfully installed typing-extensions-3.7.4.3

$ ls -ltr ~/.local
total 4
drwxr-xr-x 3 root root 4096 Aug 24 07:08 lib

그만큼에 대한 문서PYTHONNOUSERSITE다음과 같이 진술하십시오.

이것이 설정되면 Python은 사용자 site-packages 디렉터리를 sys.path에 추가하지 않습니다.

따라서 동작에 놀랐음에도 불구하고 PYTHONUSERBASE이 변수가 설정되어 있어도 pip를 계속 설치하는 것이 합리적이라고 생각합니다.설치됨패키지는 Python 경로에서 사용할 수 없습니다).

나는 찾았다pip 문제 추적기의 관련 문제그리고 시스템 사이트 패키지가 비활성화된(기본값) venvs에 대한 특별한 경우가 이미 있는 것 같습니다. 이 경우 사용자 설치가 허용되지 않습니다(명시적으로 확인하지 않았습니다).

따라서 원래 버그 보고서에 대한 솔루션을 따라가면 몇 가지 내용이 포함된 풀 요청에 도달합니다.흥미로운 기능. 즉, 슈퍼유저가 생성할 수 있는 특수 파일인 ````가 있는데, 이는 사용자 사이트 패키지 설치를 비활성화합니다. 나는 또한이와 관련된 SO에 대한 질문. 그래서 이것을 시도했지만 불행히도 여전히 사용자 기반에 계속 설치되었습니다.

$ touch /usr/local/lib/python3.8/no-global-site-packages.txt

$ pip install --user typing-extensions
...
Successfully installed typing-extensions-3.7.4.3

물론 이는 실제 내용을 읽어보면 이해가 됩니다.풀 요청 구현virtualenv 상황에서만 이 파일을 확인합니다. 내 경우에는 할 수 있기를 원합니다.언제나이 동작을 비활성화하므로 pip 코드베이스를 좀 더 자세히 살펴보겠습니다.

핵심 기능인 것으로 밝혀졌습니다.decide_user_site, 어느하다존경하다site.ENABLE_USER_SITE가치가 있지만오직명시적인 인수를 확인한 후 user. 함수 자체에서 볼 수 있듯이 이는 가상 환경이 처리되는 방식과 비대칭이므로 가상 환경이 비활성화된 경우 전역/사용자 설치가 방지됩니다. 나는 이것이 버그라고 생각하고 이를 제기했습니다.https://github.com/pypa/pip/issues/8794.

따라서 대답은 다음과 같습니다. 현재로서는 --user기본(가상이 아닌) 환경에서 설치를 비활성화하는 것이 불가능합니다. 그럴 때~이다그렇게 하는 것이 가능합니다(위에 링크된 문제가 해결되면 희망적으로) -sPYTHONNOUSERSITE=1환경 변수를 사용할 수 있지만 귀하가 찾고 있는 "sys-admin" 방법은 수정하는 것입니다.site.py 구현에 설명된 대로 site.py 직접.

답변2

오래된 스레드이지만 여기에 가능한 해결책이 있습니다. pip가 가상 환경을 갖도록 강제하고 사용자 사이트에 직접 설치하지 마십시오.

export PIP_REQUIRE_VIRTUALENV=true

관련 링크는 다음과 같습니다. https://docs.python-guide.org/dev/pip-virtualenv/

관련 정보