[Final] PEP 250 - Using site-packages on Windows

원문 링크: PEP 250 - Using site-packages on Windows

상태: Final 유형: Standards Track 작성일: 30-Mar-2001

PEP 250 – Windows에서 site-packages 사용하기

초록 (Abstract)

표준 Python 배포판에는 Lib/site-packages 디렉토리가 포함되어 있으며, 이는 Unix 플랫폼에서 로컬로 설치된 모듈 및 패키지를 저장하는 데 사용됩니다. Python과 함께 배포되는 site.py 모듈은 site-packages 디렉토리 내의 다른 모듈을 찾는 기능을 지원합니다.

이 PEP는 site-packages 디렉토리를 Windows 플랫폼에서도 유사한 방식으로 사용해야 한다고 제안합니다.

도입 배경 (Motivation)

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

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

또한, distutils가 모듈 배포 수단으로 점점 더 보편화됨에 따라, 배포된 모듈을 위한 표준 설치 위치의 필요성이 더욱 커질 것입니다. 더 많은 distutils 기반 패키지가 존재하여 재구축이 필요해지기 전에 지금 그러한 표준을 정의하는 것이 더 나을 것입니다.

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

구현 (Implementation)

이 기능의 구현은 상당히 간단합니다. 필요한 것은 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에도 변경이 필요할 것입니다. 이 변경을 구현하는 패치(patch ID 445744)는 Sourceforge에서 사용할 수 있습니다. 이 패치는 Python 버전을 확인하고 2.2 버전부터 새로운 동작을 호출하여 distutils가 이전 버전의 Python과 호환되도록 합니다.

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

참고: 이 변경은 패키지가 현재 위치를 사용하는 것을 막지 않습니다. 이 변경은 sys.path에 디렉토리를 추가할 뿐, 어떤 것도 제거하지 않습니다. 현재 위치(sys.prefix)와 새 디렉토리(site-packages) 모두 sitedirs에 포함되므로 .pth 파일은 어느 위치에서든 인식됩니다. 이 제안은 sitedirs에 단일 site-packages 디렉토리를 추가합니다.

Unix 플랫폼에서는 버전 독립적인 파일(Python 코드)과 버전 종속적인 코드(C 확장)를 위해 두 개의 디렉토리가 추가됩니다. 이는 sitedirs에 기본적으로 /usr/local에 있는 공통(Python 버전 전반에 걸친) 패키지 위치가 포함되어 있기 때문에 Unix에서 필요합니다. Windows에는 그러한 공통 위치가 없으므로 두 개의 별도 패키지 디렉토리를 가질 필요도 없습니다. 사용자가 DLL을 패키지 디렉토리에 보관하는 대신 Windows의 단일 위치에 보관하려는 경우, Python 설치 디렉토리의 DLLs 하위 디렉토리가 이미 그 목적을 위해 사용 가능합니다. DLL만을 위한 추가 디렉토리를 추가할 필요는 없을 것입니다.

해결되지 않은 문제 (Open Issues)

Unix 사용자들의 의견에 따르면 Unix 플랫폼의 현재 설정에 문제가 있을 수 있습니다. 이 PEP는 플랫폼 간 문제에 관여하기보다는 Windows 플랫폼에만 국한되며, 다른 플랫폼에 대한 변경 사항은 다른 PEP에서 다루도록 남겨둡니다.

Python을 내장(embed)하는 애플리케이션에 문제가 있을 수 있습니다. 작성자의 지식으로는 이 변경으로 인해 문제가 발생해서는 안 됩니다. Python을 내장하는 사용자들로부터는 (긍정적이든 부정적이든) 어떠한 의견도 없었습니다.

이 문서는 퍼블릭 도메인에 있습니다.

⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.

Comments