[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.path
에 site-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을 내장하는 사용자들로부터는 (긍정적이든 부정적이든) 어떠한 의견도 없었습니다.
저작권 (Copyright)
이 문서는 퍼블릭 도메인에 있습니다.
⚠️ 알림: 이 문서는 AI를 활용하여 번역되었으며, 기술적 정확성을 보장하지 않습니다. 정확한 내용은 반드시 원문을 확인하시기 바랍니다.
Comments