비패키지 컨텍스트에서 상대 가져오기 처리
Python 외부 디렉터리 구조의 상대 경로를 사용하여 모듈을 가져오려고 할 때 다음과 같은 패키지:
pkg/ __init__.py components/ core.py __init__.py tests/ core_test.py __init__.py
다음과 같은 패키지가 발생할 수 있습니다. 오류:
ValueError: Attempted relative import in non-package
Python 가져오기 메커니즘 이해
Python 가져오기 메커니즘은 현재 파일의 name 속성을 사용하여 가져올 적절한 모듈. 파일을 직접 실행하면 "__main__"의 이름이 할당되어 상대 가져오기가 불가능합니다.
가능한 해결 방법
이 문제를 해결하려면 문제가 발생하는 경우 다음 방법 중 하나를 사용할 수 있습니다.
1. -m 옵션 사용
파일을 sys.path에 모듈로 추가하는 -m 옵션을 사용하여 파일을 실행할 수 있습니다.
python -m pkg.tests.core_test
2 . package 속성 지정
스크립트로 실행되도록 특별히 설계된 패키지의 일부가 있는 경우 package 속성을 할당하여 해당 항목을 지정할 수 있습니다. 패키지에 원하는 이름 Hierarchy.
import sys if __name__ == "__main__": sys.__package__ = "pkg.tests" from ..components.core import GameLoopEvents
참조:
자세한 내용은 PEP 366을 참조하세요: https://www.python.org/dev/peps/pep -0366/
위 내용은 Python 패키지 외부의 상대 가져오기를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!