sys.path / PYTHONPATH에 디렉토리 추가


130

특정 디렉토리에서 모듈을 가져 오려고합니다.

문제는 sys.path.append(mod_directory)경로를 추가하고 파이썬 인터프리터를 열 때 디렉토리 mod_directory가 sys.path 목록의 끝에 추가된다는 것입니다. PYTHONPATH파이썬 인터프리터를 열기 전에 변수를 내 보내면 디렉토리가 목록의 시작 부분에 추가됩니다. 후자의 경우 모듈을 가져올 수 있지만 전자의 경우 모듈을 가져올 수 없습니다.

누군가 왜 이런 일이 일어나고 있는지 설명 하고 파이썬 스크립트 mod_directory 에서 시작 부분 을 추가하는 솔루션을 제공 할 수 있습니까?


나는 site모듈 을 시도했다 .
Zeinab Abbasimazar

답변:


178

이것은 문서화 된대로 작동합니다. 에 지정된 모든 경로 PYTHONPATH는 일반적으로 작업 디렉토리 이후에 표준 인터프리터 제공 경로 앞에 오는 것으로 문서화되어 있습니다. sys.path.append()기존 경로에 추가합니다. 여기여기를 참조 하십시오 . 특정 디렉토리가 먼저 오게하려면 간단히 sys.path의 헤드에 삽입하십시오.

import sys
sys.path.insert(0,'/path/to/mod_directory')

즉, 일반적으로 직접 사용 PYTHONPATH하거나 조작하는 것보다 수입을 관리하는 더 좋은 방법이 sys.path있습니다. 예를 들어이 질문에 대한 답변을 참조하십시오 .


답장을 보내 주셔서 감사합니다. 문제는 당신이 파이썬 2.6 대신 디렉토리의 파일 이름을 포함 가지고 .egg 파일로 패키지가 추가 모듈 몰랐이었다
UnadulteratedImagination

2
이봐, 이건 내 장고를 끊었 어. 사람들에게 맨 위에 놓으라고 말 하시겠습니까?!? !!?
R Claven

16
@RClaven, 죄송합니다. "최상위에 올려 놓기"와 "내 장고 고장"이라는 말이 어떤 행동과 결과인지를 말하기는 어렵습니다. 정교하게 할 수 있습니까?
Ned Deily

sys.path 작동 방식에 대한 자세한 내용은이 답변을 참조하십시오. stackoverflow.com/a/38403654/850326
djhaskin987

2
"0"대신 "1"을 사용해야합니다! 그렇지 않으면 sys.path가 중단 됩니다. stackoverflow.com/q/10095037/125507 도 참조하십시오 .
kadee


6

나에 관해서는, 나는 파이썬 경로에 카페인이 필요하다. 추가하여 파일의 경로를 추가 할 수 /home/xy/.bashrc있습니다

export PYTHONPATH=/home/xy/caffe-master/python:$PYTHONPATH.

/home/xy/.bashrc파일에.

그러나 pycharm을 사용할 때 여전히 경로가 없습니다.

따라서 PYTHONPATH실행-> 구성 편집 을 통해 변수 에 경로를 추가 할 수 있습니다 .

여기에 이미지 설명을 입력하십시오


가장 간단한 것이 가장 좋은 대답입니다. 개발을 위해 이것을 추가하면 자동 완성 작업이 가능합니다
Gang

위에서 설명한대로 .bashrc를 업데이트했지만 jupyter 노트북에는 반영되지 않았습니다. Jupyter 노트북에 여전히 모듈을 찾을 수 없습니다.
Athar

3

임시로 디렉토리를 변경하면 가져 오기에 효과적입니다.

cwd = os.getcwd()
os.chdir(<module_path>)
import <module>
os.chdir(cwd)

0

Windows의 Powershell에서 Python 스크립트를 실행할 때 다음과 같이 작동합니다.

$pathToSourceRoot = "C:/Users/Steve/YourCode"
$env:PYTHONPATH = "$($pathToSourceRoot);$($pathToSourceRoot)/subdirs_if_required"

# Now run the actual script
python your_script.py
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.