>  Q&A  >  본문

"__init__.py가 있음에도 불구하고 비패키지에서 상대 가져오기 시도가 이루어졌습니다" 오류를 수정하는 방법

<p>다음 디렉토리 구조를 사용하여 PEP 328을 따르려고 합니다. </p> <pre class="brush:php;toolbar:false;">pkg/ __init__.py 구성요소/ core.py __init__.py 테스트/ core_test.py __init__.py</pre> <p><code>core_test.py</code>에는 다음 import 문이 있습니다</p> <pre class="brush:php;toolbar:false;">from ..comComponents.core import GameLoopEvents</pre> <p>그러나 실행하면 다음 오류가 발생합니다. </p> <pre class="brush:php;toolbar:false;">tests$ python core_test.py 역추적(가장 최근 호출 마지막): 파일 "core_test.py", 3행, <module> ..comComponents.core에서 GameLoopEvents 가져오기 ValueError: 패키지가 아닌</pre>에서 상대 가져오기를 시도했습니다. <p>검색에서 "상대 경로가 __init__.py에서도 작동하지 않음" 및 "상대 경로에서 모듈 가져오기"를 찾았지만 도움이 되지 않았습니다. </p> <p>여기서 제가 놓친 것이 있나요? </p>
P粉566048790P粉566048790447일 전471

모든 응답(2)나는 대답할 것이다

  • P粉827121558

    P粉8271215582023-08-22 14:11:27

    Ignacio Vazquez-Abrams의 답변에 대한 자세한 설명:

    Python의 가져오기 메커니즘은 이름과 같이 현재 파일__name__。当直接执行一个文件时,它的名称不是通常的名称,而是使用"__main__"을 기준으로 합니다. 따라서 상대 가져오기가 작동하지 않습니다.

    Ignacio가 제안한 대로 -m选项来执行它。如果你的包中有一部分是作为脚本运行的,你还可以使用__package__ 속성을 사용하여 패키지 계층 구조에서 파일 이름이 무엇인지 알 수 있습니다.

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

    회신하다
    0
  • P粉604507867

    P粉6045078672023-08-22 09:39:36

    네. 패키지로 사용하지 않습니다.

    으아악

    회신하다
    0
  • 취소회신하다