[그누보드6] 구현 완료된 플러그인 테이블의 값을 메인페이지에서 사용하려할때 발생하는 순환 참조오류
관련링크
본문
개발한 플러그인의 데이터를 메인화면에서 불러올려고 하니 순환임포트 오류가 나네요. 혹시 이부분 먼저 겪어 보시고 해결하신 분 계실까요?
혹시 이부분 어떡해 해결해야 할까요? 아래는 오류 내용입니다.
INFO: Will watch for changes in these directories: ['C:\\Users\\fancy\\g6']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [16156] using StatReload
Process SpawnProcess-1:
Traceback (most recent call last):
File "C:\Program Files\Python311\Lib\multiprocessing\process.py", line 314, in _bootstrap
self.run()
File "C:\Program Files\Python311\Lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\fancy\g6\venv\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started
target(sockets=sockets)
File "C:\Users\fancy\g6\venv\Lib\site-packages\uvicorn\server.py", line 66, in run
return asyncio.run(self.serve(sockets=sockets))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\asyncio\runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\asyncio\base_events.py", line 654, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Users\fancy\g6\venv\Lib\site-packages\uvicorn\server.py", line 70, in serve
await self._serve(sockets)
File "C:\Users\fancy\g6\venv\Lib\site-packages\uvicorn\server.py", line 77, in _serve
config.load()
File "C:\Users\fancy\g6\venv\Lib\site-packages\uvicorn\config.py", line 435, in load
self.loaded_app = import_from_string(self.app)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\fancy\g6\venv\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string
module = importlib.import_module(module_str)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Program Files\Python311\Lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 940, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "C:\Users\fancy\g6\main.py", line 22, in <module>
from core.routers import router as template_router
File "C:\Users\fancy\g6\core\routers.py", line 4, in <module>
from bbs.index import router as index_router
File "C:\Users\fancy\g6\bbs\index.py", line 13, in <module>
from plugin.current_week.models import Currentweek
File "C:\Users\fancy\g6\plugin\current_week\__init__.py", line 8, in <module>
from .admin import register_admin_menu, register_admin_router
File "C:\Users\fancy\g6\plugin\current_week\admin\__init__.py", line 4, in <module>
from main import app
ImportError: cannot import name 'app' from partially initialized module 'main' (most likely due to a circular import) (C:\Users\fancy\g6\main.py)
INFO: Stopping reloader process [16156]
답변 1
플러그인 개발시 데이터베이스 모델을 추가할때 제작가이드(https://sir.kr/manual/g6/plugin-create/#_5)에서 가이드한 대로 plugin/{플러그인 이름}/models.py 에 테이블을 매핑시키면 어드민페이지에서 구현할때는 문제가 없지만 나중에 프론트에서 데이터를 가져올려면 순환참조 오류가 여러개의 파일에서 납니다. core\models.py 파일에 플러그인 관련 데이터베이스 모델을 추가하는 방법을 쓰면 어떨까요...