파이썬을 사용하여 파이썬 경로를 어떻게 알 수 있습니까?


352

PYTHONPATH파이썬 스크립트 (또는 대화식 쉘)에서 시스템 변수에 나열된 디렉토리를 어떻게 알 수 있습니까?


25
무엇을 하려는지 잘 모르겠지만 가져올 폴더를 검색하는 데 사용되는 폴더를 알고 싶다면에 의존해서는 안됩니다 PYTHONPATH. sys.path그것을 위해 사용하십시오 .
Vanuan

간단한 실험으로 아래의 Vanuan의 답변 (sys.path 인쇄)이 PYTHONPATH를 인쇄한다는 것을 알았습니다. 이것은 PYTHONPATH에 추가하는 add_path (new_path)를 사용하여 값을 변경 한 후에 작동합니다.
Chan Kim

6
이 게시물의 제목과 본문은 두 가지 다른 질문을합니다. sys.path"모듈의 검색 경로를 지정하는 문자열 목록" -docs.python.org/2/library/sys.html#sys.path 입니다. PYTHONPATH는이 목록에 영향을주는 환경 변수입니다. 합리적인 정의 sys.path는 "파이썬 경로"입니다.
spinkus 2016 년

4
에 대해 잊지 마십시오 python -m site.
앤드류 맥킨 레이

답변:


237

sys.pathPYTHONPATH환경 변수에 구체적으로없는 항목을 포함 할 수 있습니다 . 변수를 직접 쿼리하려면 다음을 사용하십시오.

import os
try:
    user_paths = os.environ['PYTHONPATH'].split(os.pathsep)
except KeyError:
    user_paths = []

3
(또는 더 일반적으로 ... split (os.sep)). 왜 당신이 사랑을 얻지 못하는지 알 수 없습니다, 마크 귀하의 답변은 Paul D Waite의 질문에 대한 자신의 답변보다 기술적으로 더 정확합니다 ????
mjv

5
os.sep가 올바르지 않습니다. stackoverflow.com/questions/1499019/…
Mark Ransom

2
그리고 구분 기호의 문제는 아마도 내가 사랑을 얻지 못한 이유 일 것입니다. 나를 똑바로 설정해 주셔서 감사합니다.
Mark Ransom

11
그리고 KeyError를 수신하면 시스템에 PYTHONPATH가 정의되지 않았습니까? 그게 문제입니까? 감사합니다
glarrain

9
@glarrin, correct-KeyError는 PYTHONPATH가 정의되지 않았 음을 의미합니다. 이미 기본 경로가 설정되어 있기 때문에 문제가되지 않습니다 sys.path.를 참조하십시오 .
Mark Ransom

602

아마 이것을 원할 것입니다 :

import sys
print(sys.path)

또는 터미널에서 하나의 라이너로 :

python -c "import sys; print('\n'.join(sys.path))"

주의 사항 : 여러 버전의 Python이 설치되어 있으면 해당 명령 python2또는을 사용해야합니다 python3.


같은. Linux aaa.com 2.6.18-4-686-bigmem # 1 SMP Wed Jun 6 09:41:07 UTC 2007 i686 GNU / Linux ... 데비안 Sarge
Spechal

7
이것은 현재 런타임의 파이썬 경로를 얻는 플랫폼 및 환경 독립적 인 방법입니다.
Dmitry Minkovsky

14
이 답변은 수락 된 답변보다 내 상황에 훨씬 도움이되었습니다. 내 환경 변수가 무엇인지 알고 있습니다. 환경 변수 외에 파이썬이 어디를 가리 키기로 결정했는지 알아야했습니다.
Vorticity

파이썬 3의 경우 :python -c "import sys; print('\n'.join(sys.path))"
mirceamironenco

@mirceamironenco가 변경됨
Vanuan

11

다른 답변을 편집 할 수 없습니다. Windows 전용이라는 사소한 오류가 있습니다. 보다 일반적인 해결책은 다음과 같이 os.sep를 사용하는 것입니다.

sys.path에는 특별히 PYTHONPATH 환경 변수에없는 항목이 포함될 수 있습니다. 변수를 직접 쿼리하려면 다음을 사용하십시오.

import os
os.environ['PYTHONPATH'].split(os.pathsep)

6
향후 독자 : os.sep운영 체제의 디렉토리 구분 기호를 반환합니다 (예 :) /. 파이썬 경로에서 사용되는 구분 기호는 다르며 os.pathsep허용 된 답변에 표시된 것처럼 반환됩니다 .
Paul D. Waite

3

PYTHONPATH는 값이 디렉토리 목록 인 환경 변수입니다. 일단 설정되면 파이썬은 다른 표준과 함께 가져온 모듈을 검색하는 데 사용됩니다. Python의 "sys.path"에 나열된 타사 라이브러리 디렉토리

다른 환경 변수와 같이 쉘 또는 ~ / .bashrc로 내보낼 수 있습니다 ( 여기 참조) . 아래와 같이 파이썬에서 os.environ [ 'PYTHONPATH'] 값을 파이썬으로 쿼리 할 수 ​​있습니다 :

$ python3 -c "import os, sys; print(os.environ['PYTHONPATH']); print(sys.path) if 'PYTHONPATH' in sorted(os.environ) else print('PYTHONPATH is not defined')"

쉘에서 다음과 같이 정의 된 경우

$ export PYTHONPATH=$HOME/Documents/DjangoTutorial/mysite

그런 다음 결과 =>

/home/Documents/DjangoTutorial/mysite
['', '/home/Documents/DjangoTutorial/mysite', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

다른 결과 =>

PYTHONPATH is not defined

PYTHONPATH를 여러 경로로 설정하려면 여기를 참조 하십시오 .

런타임에 sys.path.insert (), del 또는 remove ()를 통해 검색 경로를 추가하거나 삭제할 수 있지만 os.environ []을 통해서는 검색 경로를 추가 할 수 없습니다. 예:

>>> os.environ['PYTHONPATH']="$HOME/Documents/DjangoTutorial/mysite"
>>> 'PYTHONPATH' in sorted(os.environ)
True
>>> sys.path // but Not there
['', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

>>> sys.path.insert(0,os.environ['PYTHONPATH'])
>>> sys.path // It's there
['$HOME/Documents/DjangoTutorial/mysite', '', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']
>>> 

요약하면 PYTHONPATH는 sys.path에서 가져온 모듈에 대한 Python 검색 경로를 지정하는 한 가지 방법입니다. PYTHONPATH를 사용하지 않고 목록 작업을 sys.path에 직접 적용 할 수도 있습니다.


0

파이썬은 오류 메시지가 표시되면 어디에 있는지 알려줍니다. :)

>>> import os
>>> os.environ['PYTHONPATH'].split(os.pathsep)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\martin\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'PYTHONPATH'
>>>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.