파이썬은 정말 지능적으로 sys.path
. 설정 방법은 정말 복잡해질 수 있습니다 . 다음 가이드는 파이썬 수치는 무엇을로 사용할에서 때 발생의 평 조합원 파이썬 프로그래머를위한 물을 다운 다소-불완전 다소-잘못, 그러나 희망 유용한 가이드 초기 값 의 sys.path
,
sys.executable
, sys.exec_prefix
, 및 sys.prefix
A의 일반
파이썬 설치.
첫째, 파이썬은 운영체제가 말하는 것을 기반으로 파일 시스템에서 실제 물리적 위치를 파악하기 위해 최선을 다합니다. OS가 "python"이 실행 중이라고 만 표시하면 $ PATH에서 자신을 찾습니다. 모든 심볼릭 링크를 해결합니다. 이 작업을 수행하면 찾은 실행 파일의 경로가 sys.executable
, no ifs, ands 또는 buts 의 값으로 사용됩니다 .
다음으로 sys.exec_prefix
및
의 초기 값을 결정합니다 sys.prefix
.
pyvenv.cfg
같은 디렉토리 sys.executable
또는 하나의 디렉토리에 호출 된
파일이 있으면 파이썬은 파일을 찾습니다. 다른 OS는이 파일로 다른 작업을 수행합니다.
파이썬이 찾는이 구성 파일의 값 중 하나는 구성 옵션 home = <DIRECTORY>
입니다. Python은 나중에 sys.executable
초기 값을 동적으로 설정할 때 포함하는 디렉토리 대신이 디렉토리를 사용합니다 sys.prefix
. 는 IF applocal = true
설정이 나타납니다
pyvenv.cfg
Windows에서 파일이 아니라 home = <DIRECTORY>
설정, 다음 sys.prefix
이 들어있는 디렉토리로 설정됩니다 sys.executable
.
다음으로 PYTHONHOME
환경 변수를 검사합니다. 리눅스 및 Mac에서
sys.prefix
와 sys.exec_prefix
받는 설정 PYTHONHOME
이 존재하는 경우, 환경 변수 에 우선 어떤 home = <DIRECTORY>
에서 설정을 pyvenv.cfg
. Windows에서
sys.prefix
와 sys.exec_prefix
받는 설정 PYTHONHOME
은, 존재하는 경우, 환경 변수 를 제외home = <DIRECTORY>
설정이 존재에 pyvenv.cfg
대신 사용됩니다.
그렇지 않으면 의 위치 또는에서 제공 한 디렉토리 (있는 경우) 에서 뒤로 걸어 가면 이러한 sys.prefix
및 sys.exec_prefix
을 찾을 수 있습니다.sys.executable
home
pyvenv.cfg
파일 lib/python<version>/dyn-load
이 해당 디렉토리 또는 상위 디렉토리에서 발견되면 해당 디렉토리는 sys.exec_prefix
Linux 또는 Mac에 있도록 설정됩니다
. 파일
lib/python<version>/os.py
이 디렉토리 또는 하위 디렉토리에있는 경우 해당 디렉토리는 sys.prefix
Linux, Mac 및 Windows에 있고 Windows와 sys.exec_prefix
동일한 값으로 설정됩니다
sys.prefix
. 이 applocal = true
설정되어있는 경우 Windows에서는이 전체 단계를 건너 뜁니다
. 의 디렉토리 sys.executable
가 사용되거나에 home
설정된 경우 pyvenv.cfg
초기 값 대신 사용됩니다 sys.prefix
.
이러한 "랜드 마크"파일을 찾을 수 없거나 sys.prefix
아직 찾지 못한 경우 python은 sys.prefix
"대체"값으로 설정 합니다. 예를 들어 Linux 및 Mac에서는 사전 컴파일 된 기본값을 sys.prefix
및 의 값으로 사용 sys.exec_prefix
합니다. Windows는에 sys.path
대한 대체 값을 설정하기 위해가 완전히 파악
될 때까지 기다립니다 sys.prefix
.
그런 다음 (여러분 모두 기다려온 것) python은에 포함될 초기 값을 결정합니다 sys.path
.
- 파이썬이 실행하고있는 스크립트의 디렉토리가에 추가됩니다
sys.path
. Windows에서는 항상 빈 문자열로, 대신 스크립트가있는 전체 경로를 사용하도록 Python에 지시합니다.
- PYTHONPATH 환경 변수의 내용은, 설정 한 경우에 추가되고
sys.path
, 하지 않는 한 Windows에서이고 applocal
사실에로 설정됩니다 pyvenv.cfg
.
<prefix>/lib/python35.zip
Linux / Mac 및 os.path.join(os.dirname(sys.executable), "python.zip")
Windows 에
있는 zip 파일 경로 가 sys.path
.
- Windows에서 no
applocal = true
가에 설정되어 있지 않으면 pyvenv.cfg
레지스트리 키의 하위 키 내용
HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
이 추가됩니다 (있는 경우).
- Windows에서와 어떤 경우는
applocal = true
에 설정 pyvenv.cfg
하고 sys.prefix
, 다음을 찾을 수 없습니다 핵심 내용 레지스트리 키의의를 HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
존재하는 경우, 추가;
- Windows에서 no
applocal = true
가에 설정되어 있지 않으면 pyvenv.cfg
레지스트리 키의 하위 키 내용
HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
이 추가됩니다 (있는 경우).
- Windows에서와 어떤 경우는
applocal = true
에 설정 pyvenv.cfg
하고 sys.prefix
, 다음을 찾을 수 없습니다 핵심 내용 레지스트리 키의의를 HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
존재하는 경우, 추가;
- Windows에서 PYTHONPATH가 설정되지 않았고 접두사가없고 레지스트리 키가없는 경우 PYTHONPATH의 상대 컴파일 시간 값이 추가됩니다. 그렇지 않으면이 단계가 무시됩니다.
- 컴파일 타임 매크로 PYTHONPATH의 경로는 dynamic-found에 상대적으로 추가됩니다
sys.prefix
.
- Mac 및 Linux에서는의 값
sys.exec_prefix
이 추가됩니다. Windows에서는 동적으로 검색하는 데 사용되었거나 사용되었을 디렉토리 sys.prefix
가 추가됩니다.
Windows의이 단계에서 접두사가 없으면 Python은 이전 의 디렉터리에서 시도한 것처럼 모든 디렉터리에서 sys.path
랜드 마크 파일 을 검색 하여 sys.executable
무언가를 찾을 때까지이를 확인 하려고합니다 . 그렇지 않은 경우 sys.prefix
비워 둡니다.
마지막으로,이 모든 작업이 끝나면 Python은 site
모듈을 로드합니다 sys.path
.
머리 부분과 꼬리 부분에서 최대 4 개의 디렉터리를 구성하는 것으로 시작합니다. 머리 부분에는 sys.prefix
및 sys.exec_prefix
; 빈 머리는 건너 뜁니다. 꼬리 부분의 경우 빈 문자열을 사용한 다음 lib/site-packages
(Windows) 또는 lib/pythonX.Y/site-packages
다음 lib/site-python
(Unix 및 Macintosh)을 사용합니다. 각 헤드-테일 조합에 대해 기존 디렉토리를 참조하는지 확인하고, 그렇다면 sys.path에 추가하고 구성 파일에 대해 새로 추가 된 경로도 검사합니다.