테스트 사이트 - 개발 중인 베타 버전입니다

[그누보드6] 구현 완료된 플러그인 테이블의 값을 메인페이지에서 사용하려할때 발생하는 순환 참조오류

아바트 5개월 전 조회 1,373

개발한 플러그인의 데이터를 메인화면에서 불러올려고 하니 순환임포트 오류가 나네요. 혹시 이부분 먼저 겪어 보시고 해결하신 분 계실까요?

혹시 이부분 어떡해 해결해야 할까요? 아래는 오류 내용입니다.

 

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개

최우승
5개월 전

플러그인 개발시 데이터베이스 모델을 추가할때 제작가이드(https://sir.kr/manual/g6/plugin-create/#_5)에서 가이드한 대로 plugin/{플러그인 이름}/models.py 에 테이블을 매핑시키면 어드민페이지에서 구현할때는 문제가 없지만 나중에 프론트에서 데이터를 가져올려면 순환참조 오류가 여러개의 파일에서 납니다.  core\models.py 파일에 플러그인 관련 데이터베이스 모델을 추가하는 방법을 쓰면 어떨까요...

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

아바트
5개월 전
네. 역시 core폴더의 models 파일에서 플러그인 테이블을 정의하니 문제가 해결되었습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인