파이썬은 정말 지능적으로 sys.path. 설정 방법은 정말 복잡해질 수 있습니다 . 다음 가이드는 파이썬 수치는 무엇을로 사용할에서 때 발생의 평 조합원 파이썬 프로그래머를위한 물을 다운 다소-불완전 다소-잘못, 그러나 희망 유용한 가이드 초기 값 의 sys.path,
sys.executable, sys.exec_prefix, 및 sys.prefixA의 일반
파이썬 설치.
첫째, 파이썬은 운영체제가 말하는 것을 기반으로 파일 시스템에서 실제 물리적 위치를 파악하기 위해 최선을 다합니다. 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.cfgWindows에서 파일이 아니라 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.executablehomepyvenv.cfg
파일 lib/python<version>/dyn-load이 해당 디렉토리 또는 상위 디렉토리에서 발견되면 해당 디렉토리는 sys.exec_prefixLinux 또는 Mac에 있도록 설정됩니다
. 파일
lib/python<version>/os.py이 디렉토리 또는 하위 디렉토리에있는 경우 해당 디렉토리는 sys.prefixLinux, 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.zipLinux / 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에 추가하고 구성 파일에 대해 새로 추가 된 경로도 검사합니다.