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.