cannot import name 함수명 from 앱명.views partially initialized module '앱.views' (most likely due to a circular import

boingboing·2022년 1월 17일
0

현상

다른 앱의 함수를 임포트하니 발생한 에러.

원인

  • Python은 프로그램 실행시 import time과 runtime이 구분되어 실행된다.
  • rumtime의 경우 실제로 모든 코드가 실행되는 순간이다.
  • 그에 반해 import time에는 .py 모듈에 들어 있는 소스 코드를 위에서 부터 순서대로 한 번 파싱하고, 실행을 위한 바이트 코드를 생성한다.
  • import time의 결과물로 .pyc 파일이 생성되며, Syntax Error 도 코드를 파싱하는 과정에서 일어난다.
  • 또한 함수 본문과 클래스의 메소드 본문을 제외한 대부분의 코드를 import time에 실행합니다. (최신 .pyc 파일이 존재할 경우 이 과정이 생략됩니다)
  • 즉, import time에는 함수 본문과 클래스 메소드 본문을 제외한 코드들을 실행하는데 이 부분이 a.py 실행시 문제가 되어 순환 참조 에러가 발생합니다. a.py의 경우 function_a() 코드가 import time에 실행되기 때문에 a 모듈과 b 모듈이 반복적으로 import 되기 때문입니다.

https://blog.mathpresso.com/python-circular-imports-e89c5bf16510

0개의 댓글