sys.path 모듈 검색 경로의 초기화

sys.path 모듈 검색 경로의 초기화

모듈 검색 경로는 Python이 시작될 때 초기화됩니다. 이 모듈 검색 경로는 sys.path에서 접근할 수 있습니다.

출처: Python documentation

본문

모듈 검색 경로의 첫 번째 항목은 입력 스크립트가 있는 경우 그 스크립트가 포함된 디렉터리입니다. 그렇지 않으면 첫 번째 항목은 현재 디렉터리입니다. 이는 인터랙티브 셸, -c 명령 또는 -m 모듈을 실행할 때의 경우입니다.

PYTHONPATH 환경 변수는 검색 경로에 디렉터리를 추가하는 데 자주 사용됩니다. 이 환경 변수가 발견되면 그 내용이 모듈 검색 경로에 추가됩니다.

Note

PYTHONPATH는 설치된 모든 Python 버전/환경에 영향을 미칩니다. 셸 프로파일이나 전역 환경 변수에 설정할 때 주의하세요. site 모듈은 아래에서 언급하는 것처럼 더 세밀한 기법을 제공합니다.

다음으로 추가되는 항목은 표준 Python 모듈과 이러한 모듈이 의존하는 확장 모듈을 포함하는 디렉터리입니다. 확장 모듈은 Windows에서 .pyd 파일이고 다른 플랫폼에서 .so 파일입니다. 플랫폼 독립적인 Python 모듈이 있는 디렉터리를 prefix라고 합니다. 확장 모듈이 있는 디렉터리를 exec_prefix라고 합니다.

PYTHONHOME 환경 변수는 prefixexec_prefix 위치를 설정하는 데 사용할 수 있습니다. 그렇지 않으면 이 디렉터리들은 Python 실행 파일을 시작점으로 사용하고 다양한 '랜드마크(landmark)' 파일과 디렉터리를 찾아서 발견됩니다. 심볼릭 링크는 모두 따라가므로 실제 Python 실행 파일 위치가 검색 시작점으로 사용됩니다. Python 실행 파일 위치를 home이라고 합니다.

home이 결정되면, prefix 디렉터리는 먼저 pythonmajorversionminorversion.zip(예: python311.zip)을 찾아서 발견됩니다. Windows에서는 home에서 zip 아카이브를 검색하고 Unix에서는 아카이브가 lib에 있을 것으로 예상합니다. 예상 zip 아카이브 위치는 아카이브가 존재하지 않더라도 모듈 검색 경로에 추가됩니다. 아카이브가 발견되지 않으면 Windows의 Python은 Lib\os.py를 찾아 prefix 검색을 계속합니다. Unix의 Python은 lib/pythonmajorversion.minorversion/os.py(예: lib/python3.11/os.py)를 찾습니다. Windows에서는 prefixexec_prefix가 동일하지만, 다른 플랫폼에서는 lib/pythonmajorversion.minorversion/lib-dynload(예: lib/python3.11/lib-dynload)가 검색되어 exec_prefix의 기준점(anchor)으로 사용됩니다. 일부 플랫폼에서는 liblib64 또는 다른 값일 수 있습니다. sys.platlibdirPYTHONPLATLIBDIR을 참고하세요.

발견되면 prefixexec_prefix는 각각 sys.base_prefixsys.base_exec_prefix에서 사용할 수 있습니다.

PYTHONHOME이 설정되지 않고 메인 실행 파일 옆이나 그 상위 디렉터리에서 pyvenv.cfg 파일이 발견되면 sys.prefixsys.exec_prefixpyvenv.cfg를 포함하는 디렉터리로 설정되고, 그렇지 않으면 각각 sys.base_prefixsys.base_exec_prefix와 같은 값으로 설정됩니다. 이것은 가상 환경(Virtual Environments)에서 사용됩니다.

마지막으로 site 모듈이 처리되고 site-packages 디렉터리가 모듈 검색 경로에 추가됩니다. 검색 경로를 사용자 지정하는 일반적인 방법은 site 모듈 문서에 설명된 대로 sitecustomize 또는 usercustomize 모듈을 만드는 것입니다.

Note

특정 명령줄 옵션은 경로 계산에 추가로 영향을 미칠 수 있습니다. 자세한 내용은 -E, -I, -s, -S를 참고하세요.

versionchanged: 3.14에서 sys.prefixsys.exec_prefix는 이제 경로 초기화 중에 pyvenv.cfg 디렉터리로 설정됩니다. 이전에는 이것이 site에 의해 수행되어 -S의 영향을 받았습니다.

가상 환경 (Virtual Environments)

가상 환경은 prefixpyvenv.cfg 파일을 배치하며, 이로 인해 sys.prefixsys.exec_prefix가 기본 설치 대신 가상 환경을 가리키게 됩니다.

기본 설치의 prefixexec_prefix 값은 sys.base_prefixsys.base_exec_prefix에서 사용할 수 있습니다.

pyvenv.cfg는 가상 환경을 식별하는 표시자로 사용되는 것 외에도 site 초기화를 구성하는 데 사용할 수 있습니다. site의 가상 환경 문서를 참고하세요.

Note

PYTHONHOMEpyvenv.cfg 감지를 재정의합니다.

Note

"가상 환경"을 구현하는 다른 방법이 있습니다. 이 문서는 venv와 같은 pyvenv.cfg 메커니즘에 기반한 구현을 참조합니다. 대부분의 가상 환경 구현은 venv가 설정한 모델을 따르지만, 이와 다른 특이한 구현이 있을 수 있습니다.

_pth 파일

sys.path를 완전히 재정의하려면 공유 라이브러리나 실행 파일과 같은 이름의 ._pth 파일(예: python._pth 또는 python311._pth)을 만드세요. 공유 라이브러리 경로는 Windows에서 항상 알려져 있지만 다른 플랫폼에서는 사용하지 못할 수 있습니다. ._pth 파일에서 sys.path에 추가할 각 경로에 대해 한 줄씩 지정하세요. 공유 라이브러리 이름에 기반한 파일은 실행 파일에 기반한 파일을 재정의하므로, 원하면 런타임을 로드하는 모든 프로그램에 대해 경로를 제한할 수 있습니다.

파일이 존재하면 모든 레지스트리와 환경 변수가 무시되고 격리 모드가 활성화되며, 파일의 한 줄이 import site를 지정하지 않는 한 site는 가져오지 않습니다. 빈 경로와 #으로 시작하는 줄은 무시됩니다. 각 경로는 절대 경로이거나 파일 위치에 상대적일 수 있습니다. site 이외의 import 문은 허용되지 않으며 임의의 코드를 지정할 수 없습니다.

import site가 지정되면 ._pth가 아닌 .pth 파일(밑줄 없음)은 site 모듈에 의해 정상적으로 처리됩니다.

임베디드 Python

Python이 다른 응용 프로그램에 임베디드되어 있으면 Py_InitializeFromConfig()PyConfig 구조체를 사용하여 Python을 초기화할 수 있습니다. 경로 관련 세부 사항은 Python 경로 구성(Python Path Configuration)에 설명되어 있습니다.

See also

  • 자세한 Windows 참고 사항은 모듈 찾기(Finding modules) 참고.
  • Unix 세부 사항은 Unix 플랫폼에서의 Python 사용 참고.

더 알아보기 (Learn more)