반응형
질문
나는 다음 디렉토리 구조를 가진 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/을 참조하십시오.
반응형
댓글