문제

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에서 초기화 및 설치 의존 기본값"

-- http://docs.python.org/library/sys.html#sys.path

다른 팁

파이썬은 실제로 지능적으로 설정하려고 노력합니다 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.

  1. Python이 실행중인 스크립트의 디렉토리가 추가됩니다. sys.path. Windows에서 이것은 항상 빈 문자열입니다.이 문자열은 Python에게 스크립트가있는 전체 경로를 사용하도록 지시합니다.
  2. PythonPath 환경의 내용은 설정된 경우 추가됩니다. sys.path, ~하지 않는 한 당신은 창문에 있습니다 applocal true로 설정됩니다 pyvenv.cfg.
  3. zip 파일 경로입니다 <prefix>/lib/python35.zip Linux/Mac에서os.path.join(os.dirname(sys.executable), "python.zip") Windows에 추가됩니다 sys.path.
  4. Windows에 있고 아니오 applocal = true 설정되었습니다 pyvenv.cfg, 그런 다음 레지스트리 키의 하위 키 내용HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ 추가 된 경우 추가됩니다.
  5. Windows에 있고 아니오 applocal = true 설정되었습니다 pyvenv.cfg, 그리고 sys.prefix 찾을 수 없었습니다 핵심 내용 레지스트리 키의 HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ 그것이 존재하는 경우 추가됩니다.
  6. Windows에 있고 아니오 applocal = true 설정되었습니다 pyvenv.cfg, 그런 다음 레지스트리 키의 하위 키 내용HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\ 추가 된 경우 추가됩니다.
  7. Windows에 있고 아니오 applocal = true 설정되었습니다 pyvenv.cfg, 그리고 sys.prefix 찾을 수 없었습니다 핵심 내용 레지스트리 키의 HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\ 그것이 존재하는 경우 추가됩니다.
  8. Windows에서 PythonPath가 설정되지 않은 경우 접두사가 발견되지 않았고 레지스트리 키가 없으면 PythonPath의 상대 컴파일 타임 값이 추가됩니다. 그렇지 않으면이 단계는 무시됩니다.
  9. 컴파일 타임 마크로 파이썬 경로의 경로는 동적으로 outs에 대해 추가됩니다. sys.prefix.
  10. 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에 추가하고 새로 추가 된 구성 파일에 대한 경로를 검사합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top