"__init__.py가 있음에도 불구하고 비패키지에서 상대 가져오기 시도가 이루어졌습니다" 오류를 수정하는 방법
P粉566048790
2023-08-21 15:15:11
<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>
Ignacio Vazquez-Abrams의 답변에 대한 자세한 설명:
Python의 가져오기 메커니즘은 이름과 같이 현재 파일
__name__
。当直接执行一个文件时,它的名称不是通常的名称,而是使用"__main__"
을 기준으로 합니다. 따라서 상대 가져오기가 작동하지 않습니다.Ignacio가 제안한 대로
-m
选项来执行它。如果你的包中有一部分是作为脚本运行的,你还可以使用__package__
속성을 사용하여 패키지 계층 구조에서 파일 이름이 무엇인지 알 수 있습니다.자세한 내용은 http://www.python.org/dev/peps/pep-0366/을 참조하세요.
네. 패키지로 사용하지 않습니다.
으아악