> 백엔드 개발 > 파이썬 튜토리얼 > Python 3에서 상대 가져오기를 사용할 때 'ImportError'가 발생하는 이유는 무엇입니까?

Python 3에서 상대 가져오기를 사용할 때 'ImportError'가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-30 05:39:09
원래의
1022명이 탐색했습니다.

Why Do I Get

Python 3의 상대 가져오기: 수수께끼 풀기

상대 가져오기는 동일한 디렉터리 내에서 모듈을 가져오는 편리한 방법을 제공합니다. 그러나 어떤 경우에는 다음 오류가 발생할 수 있습니다.

  • "ImportError: 알려진 상위 패키지 없이 상대 가져오기를 시도했습니다."
  • "ModuleNotFoundError: 이름이 지정된 모듈이 없습니다. 'module_name'"
  • "SystemError: 상위 모듈 ''이(가) 로드되지 않아 상대 가져오기를 수행할 수 없습니다."

이러한 오류를 이해하려면 분석해 보겠습니다. 공통 디렉토리 구조:

main.py
mypackage/
    __init__.py
    mymodule.py
    myothermodule.py
로그인 후 복사

이 경우 상대 가져오기 "from .mymodule import "myothermodule.py" 내의 myfunction"은 모듈 검색 경로에 "mymodule.py"가 표시되지 않기 때문에 실패합니다. 이는 sys.path 변수에 의존하는 Python의 모듈 확인 메커니즘 때문입니다.

한 가지 해결책은 상대 가져오기 대신 절대 가져오기를 사용하는 것입니다.

from mypackage.mymodule import myfunction
로그인 후 복사

이렇게 하면 다음이 보장됩니다. Python은 sys.path에 있다고 가정되는 "mypackage" 모듈 경로에서 "mymodule"을 검색합니다.

그러나 유지 관리하려는 경우 모듈을 스크립트로 실행하는 동시에 상대 가져오기의 편리함을 고려하려면 다음을 고려하세요.

  • sys.path 앞에 상위 디렉터리를 추가하세요.
import sys
import os

SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(SCRIPT_DIR))

from mypackage.mymodule import myfunction
로그인 후 복사
  • 실행 시 -m 옵션을 사용하세요. 스크립트:
python3 -m mypackage.myothermodule
로그인 후 복사

이 접근 방식을 사용하면 파일 시스템이 아닌 Python 모듈 시스템에서 모듈을 찾을 수 있습니다.

결론적으로, 상대 가져오기는 Python의 모듈 확인 메커니즘에서 비롯됩니다. sys.path의 역할을 이해하고 다양한 전략을 활용하면 이러한 오류를 해결하고 Python 애플리케이션에서 원활한 가져오기를 보장할 수 있습니다.

위 내용은 Python 3에서 상대 가져오기를 사용할 때 'ImportError'가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿