티스토리 뷰

반응형

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

반응형
댓글
공지사항
최근에 올라온 글