Nam's

Flask 디버깅 02 - Circular Import 본문

개발/Back-end

Flask 디버깅 02 - Circular Import

namespace 2021. 1. 23. 02:03
참고자료: medium.com/mathpresso/python-circular-imports-e89c5bf16510

models.py 에서 from .. import db 를 하고 싶은데 계속 "ImportError: cannot import name 'db' from 'app' Error가 발생했다.

처음에는 상위 폴더 모듈 import 하는 다른 방법이 있나 싶어서 계속 찾아봤는데, 한 2시간 정도 헤매다가 Circular Import 문제라는 것을 알게됐다.

app의 __init__.py와 models.py가 서로가 서로를 import하고 있었다.

Python 에서는 runtime과 import time이 구분되는데, 순환 참조 오류는 import time 에서 코드를 파싱할 때 발생한다.
순환 참조 오류를 해결하기 위해서는 import time 에서 function 본문과 class method 본문은 실행되지 않는다는 것을 알아야한다.
따라서 function이나 class method 안쪽에서 import하면 된다.

Flask에서 create_app() 안에서 app = Flask(__name__) 객체 선언을 권장하는 이유도 비슷한 이유에서다.
from . import models를 create_app()안으로 넣어주면 문제가 해결된다.

'개발 > Back-end' 카테고리의 다른 글

Flask Study 01 - host 설정  (0) 2021.01.25
Flask 디버깅 03 - Load_dotenv로 .env 가져오기  (0) 2021.01.23
Flask 디버깅 01 - Flask-Restful return HTML  (0) 2021.01.22
Flask Study 00 - 덩어리들  (0) 2021.01.19
Backend 공부  (0) 2020.11.16
Comments