티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Import file from parent directory?
상위 디렉토리에서 파일을 가져올 수 있나요?
문제 내용
I have the following directory structure:
저는 다음과 같은 디렉토리 구조를 가지고 있습니다.
application
tests
main.py
main.py
application/main.py contains some functions.
application/main.py 파일에는 몇 가지 함수가 포함되어 있습니다.
tests/main.py will contain my tests for these functions but I can't import the top level main.py. I get the following error:
파일 "tests/main.py"에는 이 함수들에 대한 테스트가 포함되어 있지만, 최상위 "main.py"를 가져올 수 없습니다. 다음 오류가 발생합니다:
ImportError: Import by filename is not supported.
I am attempting to import using the following syntax:
저는 다음과 같은 구문을 사용하여 import하려고 합니다.
import main
What am I doing wrong?
무엇이 잘못된 것일까요?
높은 점수를 받은 Solution
If you'd like your script to be more portable, consider finding the parent directory automatically:
스크립트가 더 이식성(portability)이 높게 되도록 하려면, 부모 디렉토리를 자동으로 찾는 것을 고려해보세요.
import os, sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
# import ../db.py
import db
가장 최근 달린 Solution
Late to the party - most other answers here are not correct unfortunately - apart LennartRegebro's (and BrenBarn's) which is incomplete. For the benefit of future readers - the OP should, first of all, add the __init__.py
files as in
파티가 이미 끝나갈 때 - 여기서 다른 대답 대부분은 (BrenBarn과 함께) 불완전하지만, LennartRegebro의 대답을 제외하고는 대부분이 정확하지 않습니다. 나중에 이 글을 볼 독자들을 위해 말하자면, 먼저 OP는 다음과 같이 **init**.py 파일을 추가해야 합니다.
root
application
__init__.py
main.py
tests
__init__.py
main.py
then:
그런 다음, 다음과 같이 하세요:
$ cd root
$ python -m application.tests.main
or
또는
$ cd application
$ python -m tests.main
Running a script directly from inside its package is an antipattern - the correct way is running with the -m
switch from the parent directory of the root package - this way all packages are detected and relative/absolute imports work as expected.
패키지 내부에서 직접 스크립트를 실행하는 것은 안티 패턴입니다. 올바른 방법은 루트 패키지의 상위 디렉터리에서 -m 스위치를 사용하여 실행하는 것입니다. 이렇게 하면 모든 패키지가 검색되고 상대/절대 가져오기가 예상대로 작동합니다.
출처 : https://stackoverflow.com/questions/16780014/import-file-from-parent-directory
'개발 > 파이썬' 카테고리의 다른 글
Youtube_dl : 오류 수정하기 (0) | 2023.03.07 |
---|---|
딕셔너리 리스트에서 특정 키의 값 리스트로 가져오기 (0) | 2023.03.07 |
Python에서 CSV 데이터 한 줄(line) 읽는 방법 (0) | 2023.03.06 |
데이터프레임의 열 정규화 (0) | 2023.03.04 |
파이썬 딕셔너리 저장하기 (0) | 2023.03.03 |