Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 250 – Windows에서 site-packages 사용

Author:
Paul Moore <p.f.moore at gmail.com>
Status:
Final
Type:
Standards Track
Created:
30-Mar-2001
Python-Version:
2.2
Post-History:
30-Mar-2001

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

초록

표준 Python 배포판에는 Unix 플랫폼에서 로컬에 설치된 모듈과 패키지를 보관하는 데 사용되는 디렉터리 Lib/site-packages가 포함되어 있습니다. Python과 함께 배포되는 site.py 모듈에는 site-packages 디렉터리에서 다른 모듈을 찾는 기능이 포함되어 있습니다.

이 PEP에서는 Windows 플랫폼에서도 site-packages 디렉터리를 이와 유사한 방식으로 사용하도록 제안합니다.

동기

Windows 플랫폼에서는 sys.path의 기본 설정에 사용자가 로컬에서 개발한 모듈을 설치하기에 적합한 디렉터리가 포함되어 있지 않습니다. “예상되는” 위치는 Python 실행 파일 자체가 들어 있는 디렉터리인 것으로 보입니다. 이곳은 distutils(및 distutils가 생성한 설치 프로그램)가 패키지를 설치하는 위치이기도 합니다. 로컬에서 개발한 코드를 설치된 실행 파일과 같은 디렉터리에 포함하는 것은 좋은 관행이 아닙니다.

물론 사용자는 로컬에서 수정한 site.py에서나, 적절한 sitecustomize.py에서나, 심지어 .pth 파일을 통해서도 sys.path를 조작할 수 있습니다. 그러나 각각의 사이트가 자체 정책을 설정하도록 의존하기보다는 이러한 파일을 위한 표준 위치가 있어야 합니다.

또한 모듈을 배포하는 수단으로 distutils가 더욱 널리 사용됨에 따라 배포된 모듈을 위한 표준 설치 위치의 필요성도 더욱 커질 것입니다. 나중에 다시 빌드해야 하는 distutils 기반 패키지가 더 많이 존재하게 될 때까지 기다리기보다는 지금 이러한 표준을 정의하는 것이 더 나을 것입니다.

Python 2.1 이전에는 Macintosh 플랫폼의 sys.path에 site-packages 디렉터리가 포함되지 않았다는 점에 주목할 필요가 있습니다. 이는 2.1에서 변경되었으며, 이제 Macintosh에는 sys.path가 포함되어 있으므로 Windows는 사이트별 모듈 디렉터리가 없는 유일한 주요 플랫폼으로 남아 있습니다.

구현

이 기능의 구현은 상당히 간단합니다. 필요한 작업은 sitedirs를 설정하는 site.py의 섹션을 변경하는 것뿐입니다. Python 2.1 버전에는 다음이 있습니다.:

if os.sep == '/':
    sitedirs = [makepath(prefix,
                        "lib",
                        "python" + sys.version[:3],
                        "site-packages"),
                makepath(prefix, "lib", "site-python")]
elif os.sep == ':':
    sitedirs = [makepath(prefix, "lib", "site-packages")]
else:
    sitedirs = [prefix]

적절한 변경은 마지막 4줄을 다음으로 간단히 바꾸는 것입니다.:

else:
    sitedirs == [prefix, makepath(prefix, "lib", "site-packages")]

이 정책 변경을 반영하려면 distutils도 변경해야 합니다. 이 변경을 구현하는 패치가 Sourceforge에 있으며, 패치 ID는 445744입니다. 이 패치는 Python 버전을 확인하며 Python 2.2 이후 버전에서만 새 동작을 호출한다는 점에 유의하십시오. 이는 distutils가 이전 버전의 Python과 계속 호환되도록 하기 위한 것입니다.

마지막으로 bdist_wininst 명령이 사용하는 Windows 설치 프로그램을 구현하는 실행 코드도 새 위치를 사용하도록 변경해야 합니다. 이를 위한 별도의 패치가 있으며, 현재 Thomas Heller가 유지 관리하고 있습니다.

참고

  • 이 변경으로 패키지가 현재 위치를 사용하는 것이 제한되지는 않습니다. 이 변경은 sys.path에 디렉터리 하나를 추가할 뿐이며, 아무것도 제거하지 않습니다.
  • 현재 위치(sys.prefix)와 새 디렉터리(site-packages)가 모두 sitedirs에 포함되므로 .pth 파일은 어느 위치에 있든 인식됩니다.
  • 이 제안은 sitedirs에 site-packages 디렉터리 하나를 추가로 더합니다. Unix 플랫폼에서는 두 개의 디렉터리가 추가되는데, 하나는 버전에 독립적인 파일(Python 코드)을 위한 것이고 다른 하나는 버전에 종속적인 코드(C 확장)를 위한 것입니다. 이는 Unix에서 필요한데, sitedirs에는 기본적으로 /usr/local에 있는 (Python 버전 간) 공통 패키지 위치가 포함되기 때문입니다. Windows에는 그러한 공통 위치가 존재하지 않으므로, 두 개의 별도 패키지 디렉터리를 둘 필요도 없습니다.
  • 사용자가 DLL을 패키지 디렉터리에 두는 대신 Windows의 한 위치에 모아두고자 한다면, 이미 그러한 목적으로 Python 설치 디렉터리의 DLLs 하위 디렉터리를 사용할 수 있습니다. DLL만을 위한 별도의 디렉터리를 추가할 필요는 없어야 합니다.

미해결 쟁점

  • Unix 사용자들의 의견에 따르면 Unix 플랫폼의 현재 설정에 문제가 있을 수 있습니다. 이 PEP는 플랫폼 간 쟁점에 관여하는 대신 Windows 플랫폼으로만 범위를 한정하며, 다른 플랫폼에 대한 변경 사항은 다른 PEP에서 다루도록 남겨둡니다.
  • Python을 임베드하는 애플리케이션에는 문제가 있을 수 있습니다. 작성자가 아는 한, 이 변경으로 인한 문제는 없어야 합니다. Python을 임베드하는 사용자들로부터는 찬성이든 반대든 아무런 의견도 없었습니다.