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 배포판에는 Lib/site-packages 디렉터리가 포함되어 있으며, 이 디렉터리는 Unix 플랫폼에서 로컬에 설치된 모듈과 패키지를 보관하는 데 사용됩니다. 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 플랫폼에서 site-packages(사이트 패키지) 디렉터리가 sys.path에 포함되지 않았다는 점에 주목할 필요가 있습니다. 이는 2.1에서 변경되어 이제 Macintosh에서도 sys.path에 포함되므로, 사이트별 모듈 디렉터리가 없는 주요 플랫폼은 Windows만 남게 되었습니다.

구현

이 기능의 구현은 상당히 간단합니다. 필요한 것은 site.py에서 sitedirs를 설정하는 부분을 변경하는 것뿐입니다. 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에 (Python 버전 간) 공통 패키지 위치가 포함되며, 이 위치는 기본적으로 /usr/local에 있습니다. 이 때문에 Unix에서는 디렉터리가 두 개 필요합니다. Windows에는 그러한 공통 위치가 없으므로, 패키지 디렉터리를 두 개로 나누어 둘 필요도 없습니다.
  • Windows에서 DLL을 패키지 디렉터리에 두는 대신 한 위치에 모아 두고 싶은 사용자는 이미 그 용도로 Python 설치 디렉터리의 DLLs 하위 디렉터리를 사용할 수 있습니다. DLL만을 위한 디렉터리를 따로 추가할 필요는 없을 것입니다.

미해결 문제

  • Unix 사용자들의 의견에 따르면 Unix 플랫폼의 현재 구성에 문제가 있을 수 있습니다. 이 PEP는 크로스 플랫폼 문제에 관여하지 않고 의도적으로 Windows 플랫폼으로만 범위를 한정하며, 다른 플랫폼에 대한 변경은 다른 PEP에서 다루도록 남겨 둡니다.
  • Python을 임베드하는 애플리케이션에서 문제가 생길 수 있습니다. 작성자가 아는 한 이 변경으로 인한 문제는 없을 것입니다. Python을 임베드하는 사용자들로부터는 (지지하든 그렇지 않든) 아무런 의견도 없었습니다.