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
PYONPATH의 경로 이전의 경로는 어디에서 온 것인지 궁금합니다.
편집
제가 2015년에 이것을 썼을 때, 그 주제에 대한 문서는 없었습니다.만약 당신이 그것도 확인하고 싶다면, 지금 댓글에 따라 있습니다.또한 알고리즘에 대한 산문적인 설명이 있습니다.getpath.py
코드 베이스에 있습니다.저는 여전히 제 대답이 적절하고 비교적 최신의 것이라고 믿습니다.
원본 텍스트 다음
Python은 지능적으로 설정하기 위해 정말 열심히 노력합니다.설정 방법이 매우 복잡해질 수 있습니다.다음 가이드는 python이 초기 값으로 무엇을 사용할지 결정할 때 발생하는 상황에 대한 다소 불완전하고 다소 틀리지만 희망적으로 유용한 python 프로그래머를 위한 가이드입니다.sys.path
,sys.executable
,sys.exec_prefix
,그리고.sys.prefix
일반 Python 설치 환경에서.
첫째, python은 운영 체제가 알려주는 것을 기반으로 파일 시스템의 실제 물리적 위치를 파악하기 위해 최선을 다합니다.OS가 "python"이 실행 중이라고만 말하면 $PATH에 있는 것입니다.모든 심볼릭 링크를 확인합니다.가 이작 이완면파경다로값가음사으다용니됩로의의 됩니다.sys.executable
if,buts.if, s, buts 없습다니.
다으로대, 다에초값결다니정합을의 합니다.sys.exec_prefix
그리고.sys.prefix
.
에 같은있파는경라는 ,pyvenv.cfg
와 같은 sys.executable
아니면 하나의 디렉토리가 올라가면, 파이썬은 그것을 봅니다.이 파일은 OS에 따라 다른 작업을 수행합니다.
파일에서 python이 값 중 옵션인 이 이 파 서 python 하 나 는 성 옵 입 니 션 다 구 중 는 성 값 찾 구 일 에 ▁the 니 ▁one 입 다 옵 션 ▁in ▁file uration ▁that ▁config ▁for ▁is이▁option▁config▁lookshome = <DIRECTORY>
은 Python을 포함하는 디렉터리 대신 이 입니다.sys.executable
을 할 때sys.prefix
. 에약만▁later.applocal = true
은 설이다나니다납에 됩니다.pyvenv.cfg
파일이 Windows에는 이 없습니다.home = <DIRECTORY>
그 에 정설, 그다sys.prefix
를 포함하는 됩니다.sys.executable
.
다음에그입니다.PYTHONHOME
환경변수를 조사합니다. 및에는 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
리눅스 및에서 사용할 수 .sys.exec_prefix
동일한 합니다.sys.prefix
Windows(윈도우).에서 이 전체 에서 건너뜁니다.applocal = true
설정됩니다.의 디렉토리 중 하나입니다.sys.executable
사용되거나, 사용되는 경우home
을 설정합니다.pyvenv.cfg
값으 사대 다됩니용신로의 초기값으로 됩니다.sys.prefix
.
또는 "랜드마크" 파일을 수sys.prefix
아직 발견되지 않았습니다, 그러면 파이썬 세트.sys.prefix
"폴백" 값으로 변경합니다.들어 Mac에서는 을 "" "" "" ""의 합니다.sys.prefix
그리고.sys.exec_prefix
가 Windows가 될 때까지 .sys.path
의 폴백 값을 설정하기 위해 완전히 파악되었습니다.sys.prefix
.
그런 다음 은 그런다음, (러모기것을여온은다) python에 합니다.sys.path
.
- 가 python에 됩니다.
sys.path
Windows에서 이것은 항상 빈 문자열입니다. 이 문자열은 python에게 스크립트가 있는 전체 경로를 대신 사용하도록 지시합니다. - 되면 PYTHONPATH 파일에 됩니다.
sys.path
사용자가 Windows 및 Windows(윈도우)에 설치되어 있지 않은 경우applocal
는 에참설로됨에서 됩니다.pyvenv.cfg
. - 는 zip 파경로, 입니다.
<prefix>/lib/python35.zip
및 리스/Mac에서 할 수 있습니다.os.path.join(os.dirname(sys.executable), "python.zip")
윈도우즈의 경우, 에 추가됩니다.sys.path
. - 윈도우즈가 없는 인 아니요 우
applocal = true
에설된정에서 되었습니다.pyvenv.cfg
키의 은 다음과 같습니다.HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
추가됩니다(있는 경우. - 윈도우즈가 없는 인 아니요 우
applocal = true
에설된정에서 되었습니다.pyvenv.cfg
,그리고.sys.prefix
레지스트리 키의 핵심 내용을 찾을 수 없습니다.HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
가 추가됩니다(존재하는 경우). - 윈도우즈가 없는 인 아니요 우
applocal = true
에설된정에서 되었습니다.pyvenv.cfg
키의 은 다음과 같습니다.HK_LOCAL_MACHINE\Software\Python\PythonCore\<DLLVersion>\PythonPath\
추가됩니다(있는 경우. - 윈도우즈가 없는 인 아니요 우
applocal = true
에설된정에서 되었습니다.pyvenv.cfg
,그리고.sys.prefix
레지스트리 키의 핵심 내용을 찾을 수 없습니다.HK_CURRENT_USER\Software\Python\PythonCore\<DLLVersion>\PythonPath\
가 추가됩니다(존재하는 경우). - 윈도우즈에서 PYTHONPATH가 설정되지 않은 경우 접두사를 찾을 수 없고 레지스트리 키가 없는 경우 PYTHONPATH의 상대 컴파일 시간 값이 추가됩니다. 그렇지 않으면 이 단계는 무시됩니다.
- 으로 발견된 PYONPATH와 됩니다.
sys.prefix
. - 및는 다음과 같습니다.
sys.exec_prefix
가 추가되었습니다.으로 Windows를 하기 위해 입니다.sys.prefix
가 추가되었습니다.
Windows의 이 단계에서 접두사가 발견되지 않으면 python은 모든 디렉터리를 검색하여 확인하려고 시도합니다.sys.path
랜드마크 파일의 경우, 그것이 디렉토리로 하려고 했던 것처럼.sys.executable
뭔가를 찾을 때까지요그렇지 않으면,sys.prefix
빈칸으로 남습니다.
이 것이 에, 은 마막으, 이모일있후, 은을로니다합드를 합니다.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에 추가하고, 새로 추가된 경로에서 구성 파일을 검사합니다.
편집: 2021년 12월 이후로 구현이 Python으로 포팅되었기 때문에 더 이상(복잡한 단어의 시작 부분 링크)이 없습니다.
"환경 변수 PYONPATH와 설치 의존적 기본값에서 초기화됨"
-- http://docs.python.org/library/sys.html#sys.path
언급URL : https://stackoverflow.com/questions/897792/where-is-pythons-sys-path-initialized-from
'programing' 카테고리의 다른 글
javascript window.새 탭의 위치 (0) | 2023.07.26 |
---|---|
PHP로 REST API를 구축하려면 프레임워크가 필요합니까? (0) | 2023.07.26 |
명령줄을 통해 일시적으로 MySQL을 읽기 전용으로 설정하려면 어떻게 해야 합니까? (0) | 2023.07.26 |
활동의 내용 보기를 가져오는 방법은 무엇입니까? (0) | 2023.07.26 |
왜 이 "Hello, World!" 자바스크립트 코드 조각이 허용 가능한 프로그램 명령어로 인식됩니까? (0) | 2023.07.26 |