[Final] PEP 370 - Per user site-packages directory
원문 링크: PEP 370 - Per user site-packages directory
상태: Final 유형: Standards Track 작성일: 11-Jan-2008
PEP 370 – 사용자별 site-packages 디렉터리
작성자: Christian Heimes 상태: Final 유형: Standards Track 생성일: 2008년 1월 11일 Python 버전: 2.6, 3.0
개요 (Abstract)
이 PEP는 사용자들이 자신의 홈 디렉터리에 Python 패키지를 로컬로 설치할 수 있도록, 사용자별 site-packages
디렉터리를 새로 제안합니다.
도입 배경 (Rationale)
현재 Python 버전에는 사용자 홈 디렉터리에 패키지를 설치하는 통일된 방법이 없습니다 (Mac Framework 빌드 제외). 사용자들은 시스템 관리자에게 패키지 설치 또는 업데이트를 요청하거나, Virtual Python, Working Env, Virtual Env와 같은 다양한 임시 해결책(workaround) 중 하나를 사용해야 했습니다.
이 PEP의 목표는 기존 도구들을 대체하거나 Python의 격리된 설치를 구현하는 것이 아닙니다. 단지 각 사용자를 위한 추가적인 site-packages
디렉터리라는 가장 일반적인 사용 사례를 구현하는 것입니다.
이 기능은 PYTHONPATH
환경 변수를 사용하여 구현할 수 없습니다. 환경 변수는 단순히 sys.path
의 시작 부분에 새 디렉터리를 추가하지만, 해당 디렉터리 내의 .pth
파일을 파싱(parse)하지 않습니다. 여러 애플리케이션과 Python egg
파일에는 완전히 기능을 갖춘 site-packages
경로가 필요합니다.
사양 (Specification)
site
디렉터리 (site-packages
)
sys.path
에 있는 디렉터리입니다. 일반 디렉터리와 달리, 이 디렉터리 내의 .pth
파일도 처리됩니다.
사용자 site
디렉터리 (user site directory)
사용자의 홈 디렉터리 내에 있는 site
디렉터리입니다. 사용자 site
디렉터리는 특정 Python 버전에 종속됩니다. 경로는 주 버전(major)과 부 버전(minor)만을 포함하는 버전 번호를 포함합니다.
- Unix (Mac OS X 포함):
~/.local/lib/python2.6/site-packages
- Windows:
%APPDATA%/Python/Python26/site-packages
사용자 데이터 디렉터리 (user data directory)
일반적으로 사용자 site
디렉터리의 상위 디렉터리입니다. config
파일, 문서, 이미지 및 번역과 같이 Python 버전에 특화된 데이터를 위한 공간입니다.
- Unix (Mac OS X 포함):
~/.local/lib/python2.6
- Windows:
%APPDATA%/Python/Python26
사용자 기본 디렉터리 (user base directory)
사용자의 홈 디렉터리 내에 위치합니다. 사용자 site
디렉터리와 사용자 config
디렉터리가 이 기본 디렉터리 안에 있습니다. 일부 시스템에서는 이 디렉터리가 타사 앱과 공유될 수 있습니다.
- Unix (Mac OS X 포함):
~/.local
- Windows:
%APPDATA%/Python
사용자 스크립트 디렉터리 (user script directory)
바이너리 및 스크립트 파일을 위한 디렉터리입니다. 여러 Python 버전에서 공유되며, 스크립트의 대상 디렉터리입니다.
- Unix (Mac OS X 포함):
~/.local/bin
- Windows:
%APPDATA%/Python/Scripts
Windows 관련 사항
Windows에서는 Application Data 디렉터리 (일명 APPDATA
)가 애플리케이션 데이터를 위한 가장 적절한 장소로 선택되었습니다. Microsoft는 소프트웨어가 USERPROFILE
에 쓰지 않도록 권장하며, “내 문서” 역시 애플리케이션 데이터에 적합하지 않습니다. 코드는 Win32 API를 쿼리하는 대신 %APPDATA%
환경 변수를 사용합니다.
애플리케이션 데이터 디렉터리는 로밍 프로필(roaming profile)의 일부입니다. 도메인 로그인이 있는 네트워크에서는 애플리케이션 데이터가 중앙 서버에서 복사되거나 복사될 수 있습니다. 이는 로그인 및 로그오프 속도를 저하시킬 수 있습니다. 사용자들은 PYTHONUSERBASE
를 “%HOMEDRIVE%%HOMEPATH%Applicata Data
”와 같은 값으로 설정하여 데이터를 서버에 유지할 수 있습니다. 더 자세한 정보는 로컬 관리자에게 문의해야 합니다.
Unix 관련 사항
Unix에서는 ~/.python
보다 ~/.local
이 선택되었는데, 이는 이 디렉터리가 /usr/local
과 유사하게 이미 다른 여러 프로그램에서 사용되고 있기 때문입니다.
Mac OS X 관련 사항
Mac OS X에서도 Python은 ~/.local
디렉터리를 사용합니다. Python의 Framework 빌드는 ~/Library/Python/2.6/site-packages
를 추가 검색 경로로 포함합니다.
구현 (Implementation)
site
모듈에 새로운 메서드 adduserpackage()
가 추가되어 적절한 디렉터리를 검색 경로에 추가합니다. Python이 시작될 때 디렉터리가 존재하지 않으면 추가되지 않습니다. 그러나 사용자 site
디렉터리와 사용자 base
디렉터리의 위치는 distutils
를 위한 내부 변수에 저장됩니다.
사용자 site
디렉터리는 시스템 site
디렉터리보다 먼저 추가되지만, Python의 검색 경로와 PYTHONPATH
다음입니다. 이 설정은 사용자가 시스템 관리자가 설치한 패키지보다 다른 버전의 패키지를 설치할 수 있도록 허용하지만, 사용자가 실수로 표준 라이브러리(stdlib) 모듈을 덮어쓰는 것을 방지합니다. PYTHONPATH
를 사용하면 stdlib 모듈을 여전히 덮어쓸 수 있습니다.
보안상의 이유로, 유효 사용자 ID 또는 그룹 ID가 프로세스 UID/GID와 같지 않은 경우 사용자 site
디렉터리는 sys.path
에 추가되지 않습니다. 이는 suid
애플리케이션에 대한 코드 주입에 대한 추가적인 장벽입니다. 그러나 Python suid
스크립트는 항상 -E
및 -s
옵션을 사용해야 하며, 그렇지 않으면 사용자가 자신의 코드를 몰래 삽입할 수 있습니다.
사용자 site
디렉터리는 새로운 옵션 -s
또는 환경 변수 PYTHONNOUSERSITE
를 통해 비활성화할 수 있습니다. 이 기능은 site.ENABLE_USER_SITE
를 False
로 설정하여 전역적으로 비활성화할 수 있습니다. 이는 site.py
를 편집하여 설정해야 하며, sitecustomize.py
또는 그 이후에는 변경할 수 없습니다.
사용자 base
디렉터리의 경로는 환경 변수 PYTHONUSERBASE
로 덮어쓸 수 있습니다. PYTHONUSERBASE
가 설정되지 않았거나 비어 있는 경우 기본 위치가 사용됩니다.
distutils.command.install
(setup.py install
)은 사용자 site
디렉터리에 패키지를 설치하기 위한 새로운 인자 --user
를 얻습니다. 필요한 디렉터리는 필요할 때 생성됩니다.
distutils.command.build_ext
(setup.py build_ext
)는 새로운 인자 --user
를 얻으며, 이는 사용자 base
디렉터리의 include/
및 lib/
디렉터리를 헤더 파일 및 라이브러리 검색 경로에 추가합니다. 또한 lib/
디렉터리를 rpath
에 추가합니다.
site
모듈은 사용자 base
또는 사용자 site
디렉터리의 경로를 표준 출력으로 인쇄하기 위한 두 가지 인자 --user-base
와 --user-site
를 얻습니다. 이 기능은 스크립팅을 위한 것으로, 예를 들어 ./configure --prefix $(python2.5 -m site --user-base)
와 같이 사용될 수 있습니다.
distutils.sysconfig
는 site
의 private 변수에 접근하는 메서드를 얻게 될 것입니다. (아직 구현되지 않음)
Windows 업데이터도 업데이트해야 합니다. 이는 새 Explorer 창에서 사용자 site
디렉터리를 여는 메뉴 항목을 생성해야 합니다.
하위 호환성 (Backwards Compatibility)
확정되지 않음 (TBD)
참조 구현 (Reference Implementation)
참조 구현은 버그 트래커에서 확인할 수 있습니다.
저작권 (Copyright)
이 문서는 퍼블릭 도메인에 공개되었습니다.
참고 자료 (References)
- Virtual Python
- Working Env
- Virtual Env
- 참조 구현 (reference implementation)
- MSDN: CSIDL
- 사용자별
site-packages
디렉터리에 대한 초기 제안 ~/.local/
제안- APPDATA 토론
- 보안 문제 및
-s
옵션 bin
디렉터리에 대한 논의- freedesktop.org XGD basedir 사양에서
~/.local
언급 - Mac용
~/.local
및usercustomize
파일 - Windows의 로밍 프로필
⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.
Comments