PEP 370 – 사용자별 site-packages 패키지 디렉터리
- Author:
- Christian Heimes <christian at python.org>
- Status:
- Final
- Type:
- Standards Track
- Created:
- 11-Jan-2008
- Python-Version:
- 2.6, 3.0
- Post-History:
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
이 PEP는 사용자가 자신의 홈 디렉터리에 Python 패키지를 로컬로 설치할 수 있도록 새로운 사용자별 site-packages 디렉터리를 제안합니다.
근거
현재 Python 버전에는 (Mac 프레임워크 빌드를 제외하면) 사용자의 홈 디렉터리에 패키지를 설치하는 통일된 방법이 없습니다. 사용자는 시스템 관리자에게 패키지를 대신 설치하거나 업데이트해 달라고 요청하거나, Virtual Python [1], Working Env [2], Virtual Env [3] 같은 여러 우회 방법 중 하나를 사용해야만 합니다.
이 PEP의 목표는 이러한 도구를 대체하거나 Python의 격리된 설치를 구현하는 것이 아닙니다. 이 PEP는 사용자마다 추가 site-packages 패키지 디렉터리를 두는, 가장 흔한 사용 사례만 구현합니다.
이 기능은 환경 변수 PYTHONPATH를 사용해서는 구현할 수 없습니다. 이 환경 변수는 sys.path의 맨 앞에 새 디렉터리를 삽입할 뿐, 그 디렉터리에 있는 pth 파일을 해석하지는 않습니다. 여러 애플리케이션과 Python egg에는 완전한 site-packages 패키지 경로가 필요합니다.
명세
사이트 디렉터리(패키지가 설치되는 site-packages)
sys.path에 있는 디렉터리입니다. 일반 디렉터리와 달리 이 디렉터리에 있는 pth 파일도 처리됩니다.
사용자 site 디렉터리
사용자의 홈 디렉터리 안에 있는 site 디렉터리입니다. 사용자 site 디렉터리는 Python 버전별로 따로 있습니다. 경로에는 버전 번호(주 버전과 부 버전만)가 포함됩니다.
- Unix (Mac OS X 포함)
~/.local/lib/python2.6/site-packages- Windows
%APPDATA%/Python/Python26/site-packages
사용자 데이터 디렉터리
보통 사용자 site 디렉터리의 부모 디렉터리입니다. 설정 파일, 문서, 이미지, 번역처럼 Python 버전별 데이터를 두기 위한 디렉터리입니다.
- Unix (Mac 포함)
~/.local/lib/python2.6- Windows
%APPDATA%/Python/Python26
사용자 베이스 디렉터리
이 디렉터리는 사용자의 홈 디렉터리 안에 있습니다. 사용자 site 디렉터리와 사용자 설정 디렉터리는 베이스 디렉터리 안에 있습니다. 일부 시스템에서는 이 디렉터리를 서드파티 애플리케이션과 공유할 수 있습니다.
- Unix (Mac 포함)
~/.local- Windows
%APPDATA%/Python
사용자 스크립트 디렉터리
바이너리와 스크립트를 위한 디렉터리입니다. [10] 이 디렉터리는 여러 Python 버전이 함께 사용하며, 스크립트가 설치되는 디렉터리입니다.
- Unix (Mac 포함)
~/.local/bin- Windows
%APPDATA%/Python/Scripts
Windows 참고 사항
Windows에서는 애플리케이션 데이터를 두기 위해 가장 명확하게 지정된 장소라는 이유로 Application Data 디렉터리(APPDATA라고도 함)를 선택했습니다. Microsoft는 소프트웨어가 USERPROFILE에 쓰지 않도록 권장하며 [5] My Documents 역시 애플리케이션 데이터에 적합하지 않습니다. [8] 이 코드는 Win32 API를 조회하지 않고, 대신 환경 변수 %APPDATA%를 사용합니다.
애플리케이션 데이터 디렉터리는 로밍 프로필의 일부입니다. 도메인 로그인을 사용하는 네트워크에서는 애플리케이션 데이터를 중앙 서버에서 가져오거나 중앙 서버로 복사할 수 있습니다. 이 때문에 로그인과 로그오프가 느려질 수 있습니다. 사용자는 예를 들어 PYTHONUSERBASE를 “%HOMEDRIVE%%HOMEPATH%Applicata Data” 값으로 설정하여 데이터를 서버에 둘 수 있습니다. 자세한 내용은 해당 로컬 관리자에게 문의하십시오. [13]
Unix 참고 사항
Unix에서는 ~/.python 대신 ~/.local을 선택했습니다. 이 디렉터리는 /usr/local과 비슷한 방식으로 이미 여러 다른 프로그램에서 사용하고 있기 때문입니다. [7] [11]
Mac OS X 참고 사항
Mac OS X에서도 Python은 ~/.local 디렉터리를 사용합니다. [12] Python의 프레임워크 빌드는 ~/Library/Python/2.6/site-packages를 추가 검색 경로로 포함합니다.
구현
site 모듈에 적절한 디렉터리를 검색 경로에 추가하는 새 메서드 adduserpackage()가 추가됩니다. Python이 시작될 때 해당 디렉터리가 존재하지 않으면 그 디렉터리는 추가되지 않습니다. 그러나 사용자 site 디렉터리와 사용자 베이스 디렉터리의 위치는 distutils를 위해 내부 변수에 저장됩니다.
사용자 site 디렉터리는 시스템 site 디렉터리보다는 앞에, Python의 검색 경로와 PYTHONPATH보다는 뒤에 추가됩니다. 이렇게 구성하면 사용자는 시스템 관리자가 설치한 것과 다른 버전의 패키지를 설치할 수 있지만, 실수로 표준 라이브러리 모듈을 덮어쓰는 일은 막을 수 있습니다. 표준 라이브러리 모듈은 여전히 PYTHONPATH로 덮어쓸 수 있습니다.
보안상의 이유로, 유효 사용자 ID나 그룹 ID가 프로세스의 uid / gid와 같지 않으면 사용자 사이트 디렉터리는 sys.path에 추가되지 않습니다 [9]. 이는 suid 애플리케이션에 대한 코드 주입을 막는 추가적인 장벽입니다. 그러나 Python suid 스크립트는 항상 반드시 -E 및 -s 옵션을 사용해야 합니다. 그렇지 않으면 사용자가 자신의 코드를 몰래 끼워 넣을 수 있습니다.
사용자 사이트 디렉터리는 새 옵션 -s 또는 환경 변수 PYTHONNOUSERSITE로 비활성화할 수 있습니다. site.ENABLE_USER_SITE를 False 값으로 설정하면 이 기능을 전역적으로 비활성화할 수 있습니다. 이 값은 site.py를 편집하여 설정해야 합니다. in sitecustomize.py 또는 그 이후에서는 이 값을 변경할 수 없습니다.
사용자 베이스 디렉터리의 경로는 환경 변수 PYTHONUSERBASE로 덮어쓸 수 있습니다. PYTHONUSERBASE가 설정되지 않았거나 비어 있으면 기본 위치가 사용됩니다.
distutils.command.install (setup.py install)에 사용자 사이트 디렉터리에 패키지를 설치하는 새 인자 --user가 추가됩니다. 필요한 디렉터리는 필요할 때 생성됩니다.
distutils.command.build_ext (setup.py build_ext)에 사용자 베이스 디렉터리의 include/ 및 lib/ 디렉터리를 헤더 파일과 라이브러리의 검색 경로에 추가하는 새 인자 --user가 추가됩니다. 또한 lib/ 디렉터리를 rpath에 추가합니다.
site 모듈에 사용자 베이스 디렉터리 또는 사용자 사이트 디렉터리의 경로를 표준 출력으로 출력하는 두 인자 --user-base와 --user-site가 추가됩니다. 이 기능은 스크립트 작성을 위한 것입니다. 예: ./configure --prefix $(python2.5 -m site --user-base)
distutils.sysconfig에 site의 비공개 변수에 접근하는 메서드가 추가될 예정입니다. (아직 구현되지 않았습니다.)
Windows 업데이터도 갱신해야 합니다. 이 업데이터는 사용자 사이트 디렉터리를 새 Windows 탐색기 창에서 여는 메뉴 항목을 만들어야 합니다.
하위 호환성
미정
참조 구현
참조 구현은 버그 트래커에서 볼 수 있습니다. [4]
Copyright
This document has been placed in the public domain.
References
[6] Initial suggestion for a per user site-packages directory https://mail.python.org/archives/list/python-dev@python.org/message/V23CUKRH3VCHFLV33ADMHJSM53STPA7I/