Python 스크립트에서 PYTHONPATH를 어떻게 설정합니까?


115

내 / etc / profile 및 내 환경 변수에서 설정하는 방법을 알고 있습니다.

하지만 스크립트 중에 설정하려면 어떻게해야합니까? import os, sys입니까? 어떻게하나요?

답변:


192

설정하지 않고 PYTHONPATH에 항목을 추가합니다 sys.path. Python 패키지를 검색해야하는 디렉토리 목록이므로 해당 목록에 디렉토리를 추가하기 만하면됩니다.

sys.path.append('/path/to/whatever')

실제로 는 경로 구분 문자 ( Linux 계열 시스템, Windows)에서 sys.path의 값을 분할하여 초기화됩니다 .PYTHONPATH:;

을 사용하여 디렉토리를 추가 할 수도 있으며이 site.addsitedir방법은 .pth전달하는 디렉토리 내에 존재하는 파일 도 고려 합니다. (에서 지정한 디렉토리에는 해당되지 않습니다 PYTHONPATH.)


11
이 답변이 게시 된 지 수년이 지났지 만 가져올 때 Python이 다른 모든 디렉토리보다 먼저 새 디렉토리를 확인하도록하려면 새 디렉토리를 목록에 먼저 넣어야합니다. 에서 sys.path.insert(0, '/path/to/whatever').
wecsam

39

다음을 통해 환경 변수를 가져오고 설정할 수 있습니다 os.environ.

import os
user_home = os.environ["HOME"]

os.environ["PYTHONPATH"] = "..."

그러나 통역사가 이미 실행 중이므로 아무 효과가 없습니다. 사용하는 것이 좋습니다

import sys
sys.path.append("...")

이것은 PYTHONPATH인터프리터 시작시 변환 될 배열입니다 .


18

sys.path.append('dir/to/path')체크하지 않고 넣어두면 이미 추가되어 있으면 sys.path. 이를 위해 다음을 권장합니다.

import sys
import os # if you want this directory

try:
    sys.path.index('/dir/path') # Or os.getcwd() for this directory
except ValueError:
    sys.path.append('/dir/path') # Or os.getcwd() for this directory

2
좋은. 매우 Pythonic.
PartialOrder

1
PythonPath를 어떻게 비울 수 있습니까? 추가하고 싶지 않습니다. 나는 그것을 비우고 내가 원하는 것만 넣고 싶다. 이를 수행하는 방법이 있습니까?
Schütze

sys.path .__ init __ ()를 호출하여 다시 초기화 해 보셨습니까? 이것은 파이썬 경로를 비워야합니다. 도움이 되었기를 바랍니다.
Thayz

@ francisco-manuel-garca-botella 오래된 질문에 답하는 것은이 사이트에서 매우 환영합니다! 죄송합니다.
user7610

나는 이것이 파이썬 적이라는 데 동의하지 않으며 좋은 프로그래밍 접근 방식이 아니라고 제안합니다. 예외 처리는 예외가 발생할 때 매우 비싸므로 else를 사용할 가능성이 높은 "if"문을 대체하는 데 사용하고 싶지 않습니다. sys.path의 'mypath'가 간단하다면 ... 그렇지 않으면 ... 내 조언이 될 것입니다.
markgalassi

6

PYTHONPATH는 런타임에 수정할 수 있는 sys.path로 끝납니다 .

import sys
sys.path += ["whatever"]

@DavidZ의 답변보다이 답변을 선호하는 이유가 있습니까?
인 Dror

다른 것이 없다면 덜 장황합니다.
tripleee

-1

당신은 설정할 수 있습니다 PYTHONPATH하여 os.environ['PATHPYTHON']=/some/path, 다음 호출 할 필요가 os.system('python')새로 추가 된 경로가 효과적으로 만들 수있는 파이썬 쉘을 다시 시작합니다.


1
os.system()"python shell을 다시 시작"하지 않고 새로운 대화 형 Python 인스턴스를 시작합니다. 그로부터 돌아 오면 호출 스크립트로 돌아갑니다.
tripleee

-2

나는 리눅스도 작동합니다.

import sys
sys.path.extend(["/path/to/dotpy/file/"])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.