Python의 Sys.Path는 어디에서 초기화됩니까?
문제
Python의 Sys.Path는 어디에서 초기화됩니까?
upd: Python은 PythonPath를 참조하기 전에 몇 가지 경로를 추가하고 있습니다.
>>> import sys
>>> from pprint import pprint as p
>>> p(sys.path)
['',
'C:\\Python25\\lib\\site-packages\\setuptools-0.6c9-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\orbited-0.7.8-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\morbid-0.8.6.1-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\demjson-1.4-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\stomper-0.2.2-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\uuid-1.30-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\stompservice-0.1.0-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\cherrypy-3.0.1-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\pyorbited-0.2.2-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\flup-1.0.1-py2.5.egg',
'C:\\Python25\\lib\\site-packages\\wsgilog-0.1-py2.5.egg',
'c:\\testdir',
'C:\\Windows\\system32\\python25.zip',
'C:\\Python25\\DLLs',
'C:\\Python25\\lib',
'C:\\Python25\\lib\\plat-win',
'C:\\Python25\\lib\\lib-tk',
'C:\\Python25',
'C:\\Python25\\lib\\site-packages',
'C:\\Python25\\lib\\site-packages\\PIL',
'C:\\Python25\\lib\\site-packages\\win32',
'C:\\Python25\\lib\\site-packages\\win32\\lib',
'C:\\Python25\\lib\\site-packages\\Pythonwin']
내 pythonpath는 다음과 같습니다.
PYTHONPATH=c:\testdir
PythonPath의 경로가 어디에서 왔는지 궁금합니다.
해결책
"환경 변수 PythonPath에서 초기화 및 설치 의존 기본값"
다른 팁
파이썬은 실제로 지능적으로 설정하려고 노력합니다 sys.path
. 설정 방법은 얻을 수 있습니다 진짜 복잡한. 다음 가이드는 파이썬이 어떻게 사용할 것인지 알아낼 때 발생하는 일에 대한 랭킹 및 다소 불만족스럽고 다소 완화되었지만 다소 완화되었지만 다소 완화되었지만 희망적으로 가이드가 안내서입니다. 초기 값 의 sys.path
,
sys.executable
, sys.exec_prefix
, 그리고 sys.prefix
a 정상파이썬 설치.
첫째, Python은 운영 체제가 말한 내용에 따라 파일 시스템에서 실제 물리적 위치를 파악하기 위해 최선을 다합니다. OS가 방금 "Python"이 실행중인 경우 $ 경로에서 자체적으로 발견됩니다. 그것은 모든 상징적 링크를 해결합니다. 이 작업을 수행 한 후에는 찾은 실행 파일의 경로가 값으로 사용됩니다. sys.executable
, ifs, ands 또는 buts.
다음으로 초기 값을 결정합니다 sys.exec_prefix
그리고 sys.prefix
.
호출 된 파일이있는 경우 pyvenv.cfg
같은 디렉토리에서sys.executable
또는 하나의 디렉토리 업, Python은 그것을 봅니다. 다른 OS는이 파일과 다른 작업을 수행합니다.
Python이 찾는이 구성 파일의 값 중 하나는 구성 옵션입니다. home = <DIRECTORY>
. Python은 포함 된 디렉토리 대신이 디렉토리를 사용합니다. sys.executable
초기 값을 동적으로 설정할 때 sys.prefix
나중에. 만약 applocal = true
설정에 설정이 나타납니다pyvenv.cfg
Windows에 파일이 있지만 그렇지 않습니다 home = <DIRECTORY>
그러면 설정 sys.prefix
포함 된 디렉토리로 설정됩니다 sys.executable
.
다음으로 PYTHONHOME
환경 변수가 검사됩니다. Linux 및 Mac에서sys.prefix
그리고 sys.exec_prefix
로 설정됩니다 PYTHONHOME
환경 변수, 존재하는 경우 대체 어느 home = <DIRECTORY>
설정 pyvenv.cfg
. 창문에서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에서 sys.exec_prefix
동일한 값으로 설정하십시오sys.prefix
창에. 이 전체 단계는 Windows에서 건너 뜁니다applocal = true
설정되었습니다. 디렉토리 중 하나입니다 sys.executable
사용되거나 if home
설정되어 있습니다 pyvenv.cfg
, 그것은 대신 초기 값에 사용됩니다. sys.prefix
.
이 "랜드 마크"파일을 찾을 수 없거나 sys.prefix
아직 발견되지 않았고 파이썬 세트가 있습니다 sys.prefix
"폴백"값으로. 예를 들어 Linux 및 Mac은 사전 컴파일 된 기본값을 다음의 값으로 사용합니다. sys.prefix
그리고 sys.exec_prefix
. Windows는까지 기다립니다 sys.path
폴백 값을 설정하기 위해 완전히 파악됩니다.sys.prefix
.
그런 다음 (여러분 모두가 기다리고있는 것) Python은 포함 할 초기 값을 결정합니다. sys.path
.
- Python이 실행중인 스크립트의 디렉토리가 추가됩니다.
sys.path
. Windows에서 이것은 항상 빈 문자열입니다.이 문자열은 Python에게 스크립트가있는 전체 경로를 사용하도록 지시합니다. - PythonPath 환경의 내용은 설정된 경우 추가됩니다.
sys.path
, ~하지 않는 한 당신은 창문에 있습니다applocal
true로 설정됩니다pyvenv.cfg
. - zip 파일 경로입니다
<prefix>/lib/python35.zip
Linux/Mac에서os.path.join(os.dirname(sys.executable), "python.zip")
Windows에 추가됩니다sys.path
. - Windows에 있고 아니오
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에 있고 아니오
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의 상대 컴파일 타임 값이 추가됩니다. 그렇지 않으면이 단계는 무시됩니다.
- 컴파일 타임 마크로 파이썬 경로의 경로는 동적으로 outs에 대해 추가됩니다.
sys.prefix
. - Mac과 Linux에서는 값입니다
sys.exec_prefix
추가됩니다. Windows에서, 동적으로 검색하는 데 사용 된 (또는 사용 된) 디렉토리sys.prefix
추가됩니다.
창 에서이 단계에서 접두사가 발견되지 않으면 파이썬은 검색하여 결정을 시도합니다. 모두 안의 디렉토리 sys.path
랜드 마크 파일의 경우 디렉토리와 관련하여 sys.executable
이전에는 무언가를 찾을 때까지. 그렇지 않다면 sys.prefix
비워 져 있습니다.
마지막으로,이 모든 후에는 파이썬이로드됩니다 site
모듈, 더 많은 물건을 추가합니다 sys.path
:
헤드와 꼬리 부분에서 최대 4 개의 디렉토리를 구성하는 것으로 시작합니다. 헤드 부분의 경우 사용합니다
sys.prefix
그리고sys.exec_prefix
; 빈 머리가 건너 뜁니다. 꼬리 부분의 경우 빈 줄을 사용한 다음lib/site-packages
(창에서) 또는lib/pythonX.Y/site-packages
그리고lib/site-python
(유닉스와 매킨토시에서). 각각의 고유 한 헤드 테일 조합에 대해 기존 디렉토리를 지칭하는지 확인하고 그렇다면 Sys.Path에 추가하고 새로 추가 된 구성 파일에 대한 경로를 검사합니다.