사용자가 pip를 사용하여 홈 디렉터리에 패키지를 설치하는 것을 방지하려고 합니다.
의 출력은 python3 -m site --help
슈퍼유저가 사용자 사이트 디렉터리를 비활성화할 수 있음을 나타냅니다. 그런데 이것이 어떻게 이루어지나요? 나는 site.ENABLE_USER_SITE
a에서 설정을 시도했지만 sitecustomize.py
도움이 되지 않습니다. PYTHONNOUSERSITE=1
환경 설정 이나 -s
Python으로의 전달은 작동하지만 엄밀히 말하면 슈퍼유저 조정은 아닙니다.
나는 또한 어떻게든 사용자에 대해 pip를 비활성화하여 이에 접근하려고 시도했습니다. 우리는 패키지가 venv 환경에 설치되지만 사용자 홈 디렉토리에는 설치되지 않는다는 점에 매우 만족합니다. 설치를 pip.conf
강제로 비활성화하기 위해 넣을 수 있는 것이 있습니까 ?--user
답변1
큐:--user 설치를 강제로 비활성화하기 위해 pip.conf에 넣을 수 있는 것이 있습니까?
ㅏ:아니요. 구성 파일은 다음에 정의된 우선 순위에 따라 항상 재정의될 수 있습니다.핍 문서:
명령줄 옵션은 구성 파일보다 우선하는 환경 변수보다 우선합니다.
큐:슈퍼유저가 사용자 사이트 디렉터리를 비활성화할 수 있습니다. 그런데 이것이 어떻게 이루어지나요? PYTHONNOUSERSITE=1
환경 설정 이나 -s
Python으로의 전달은 작동하지만 엄밀히 말하면 슈퍼유저 조정은 아닙니다.
ㅏ:나는 정반대를 찾았기 때문에 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
기본(가상이 아닌) 환경에서 설치를 비활성화하는 것이 불가능합니다. 그럴 때~이다그렇게 하는 것이 가능합니다(위에 링크된 문제가 해결되면 희망적으로) -s
및 PYTHONNOUSERSITE=1
환경 변수를 사용할 수 있지만 귀하가 찾고 있는 "sys-admin" 방법은 수정하는 것입니다.site.py 구현에 설명된 대로 site.py 직접.
답변2
오래된 스레드이지만 여기에 가능한 해결책이 있습니다. pip가 가상 환경을 갖도록 강제하고 사용자 사이트에 직접 설치하지 마십시오.
export PIP_REQUIRE_VIRTUALENV=true
관련 링크는 다음과 같습니다. https://docs.python-guide.org/dev/pip-virtualenv/