상위 디렉터리에서 파일을 가져오시겠습니까?
디렉토리 구조는 다음과 같습니다.
application
tests
main.py
main.py
application/main.py 에는 일부 기능이 포함되어 있습니다.
tests/main.py 에는 이러한 기능에 대한 내 테스트가 포함되어 있지만 최상위 수준인 main.py 을 가져올 수 없습니다.다음 오류가 발생합니다.
ImportError: Import by filename is not supported.
다음 구문을 사용하여 가져오려고 합니다.
import main
내가 뭘 잘못하고 있는 거지?
스크립트를 보다 쉽게 이동할 수 있도록 하려면 상위 디렉토리를 자동으로 찾는 것이 좋습니다.
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# import ../db.py
import db
경로에 응용 프로그램 dir를 추가해야 합니다.
import sys
sys.path.append("/path/to/dir")
from app import object
또는 셸에서:
setenv PATH $PATH:"path/to/dir"
창을 사용하는 경우:창에서 경로에 변수를 추가하는 중입니다.
또는 명령줄에서:
set PATH=%PATH%;C:\path\to\dir
사이의 차이에 주의해 주십시오.PYTHONPATH
,PATH
,sys.path
.
파티에 8년 늦었지만 여전히 여기에 있는 대부분의 다른 답변은 여전히 불행하게도 정확하지 않습니다. 불완전한 레나트 레게브로(및 브렌 반)를 제외하고 있습니다.미래의 독자들의 이익을 위해 - OP는 무엇보다도, 다음을 추가해야 합니다.__init__.py
에 있는 파일
root
application
__init__.py
main.py
tests
__init__.py
main.py
그러면:
$ cd root
$ python -m application.tests.main # note no .py
또는
$ cd application
$ python -m tests.main
패키지 내부에서 스크립트를 직접 실행하는 것은 안티패턴입니다. 올바른 방법은 다음과 같습니다.-m
루트 패키지의 상위 디렉터리에서 전환 - 이렇게 하면 모든 패키지가 검색되고 상대/절대 가져오기가 예상대로 작동합니다.
무엇보다도, 당신은 당신의 디렉토리를 패키지로 만들어야 합니다.__init__.py
파일:
application
tests
__init__.py
main.py
__init__.py
main.py
그러면 당신은 위의 디렉토리가 켜져 있는지 확인해야 합니다.sys.path
응용프로그램을 패키지에 입력하여 설치하거나 올바른 폴더에서 작업을 실행하는 등 다양한 방법이 있습니다.
상위/자매 디렉터리에서 항목을 가져올 수 없습니다.시스템 경로의 디렉터리, 현재 디렉터리 또는 패키지 내의 하위 디렉터리에서만 항목을 가져올 수 있습니다.당신이 없기 때문에.__init__.py
파일은 패키지를 형성하지 않으며 시스템 경로에 파일을 배치해야만 가져올 수 있습니다.
상위 디렉터리의 다른 하위 디렉터리에 있는 파일을 가져오려면 다음과 같은 방법을 사용하십시오.
sys.path.append(os.path.abspath('../other_sub_dir'))
import filename_without_py_extension
편집: 닫는 브래킷이 없습니다.
python .에는 동일한 디렉토리에 대해 존재합니다. 부모 디렉토리가 부모 디렉토리에서 파일을 가져올 경우 사용할 수 있습니다.
from ... 파일 이름 가져오기(.py 확장자 없음)
언급URL : https://stackoverflow.com/questions/16780014/import-file-from-parent-directory
'programing' 카테고리의 다른 글
Android 리소스/값에 부동 소수점 값 추가 (0) | 2023.08.06 |
---|---|
도커가 도커 레지스트리 서버에 이미 로그인되어 있는지 확인하는 방법 (0) | 2023.08.06 |
내용이 넘치는 Flexbox 스크롤 (0) | 2023.08.06 |
Base64를 사용하여 Base64에서 문자열을 디코딩하고 인코딩하는 방법을 아는 사람이 있습니까? (0) | 2023.08.06 |
데이터베이스에 메타데이터를 유지하지 않고 Spring-Batch? (0) | 2023.08.06 |