본문 바로가기
Python/Python FAQ

Python "__init__.py"가 있어도 "Attempted relative import in non-package" 오류를 어떻게 해결할 수 있을까요?, How to fix "Attempted relative import in non-package" even with __init__.py

by 베타코드 2023. 6. 30.
반응형

질문


나는 다음 디렉토리 구조를 가진 PEP 328을 따르려고 노력하고 있습니다:

pkg/
  __init__.py
  components/
    core.py
    __init__.py
  tests/
    core_test.py
    __init__.py

core_test.py에서 다음과 같은 import 문이 있습니다.

from ..components.core import GameLoopEvents

그러나 실행하면 다음과 같은 오류가 발생합니다:

tests$ python core_test.py 
Traceback (most recent call last):
  File "core_test.py", line 3, in <module>
    from ..components.core import GameLoopEvents
ValueError: Attempted relative import in non-package

찾아보니 "relative path not working even with __init__.py"와 "Import a module from a relative path"를 찾았지만 도움이 되지 않았습니다.

여기서 빠뜨린 것이 있을까요?


답변


Ignacio Vazquez-Abrams의 답변을 설명하기 위해:

Python import 메커니즘은 현재 파일의 __name__을 기준으로 작동합니다. 직접 파일을 실행할 때 일반적인 이름이 아닌 "__main__"이라는 이름을 갖게 됩니다. 따라서 상대적인 import가 작동하지 않습니다.

Ignacio가 제안한대로 -m 옵션을 사용하여 실행할 수 있습니다. 패키지의 일부를 스크립트로 실행하려는 경우 __package__ 속성을 사용하여 해당 파일이 패키지 계층 구조에서 가져야 할 이름을 지정할 수도 있습니다.

자세한 내용은 http://www.python.org/dev/peps/pep-0366/을 참조하십시오.

반응형

댓글