그누보드6 설치후 실행 안됩니다
본문
환경은 윈도우11에서 진행 했구요
가상환경 만들어서 실행함
INFO: Will watch for changes in these directories: ['F:\\python\\te\\g6']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [1644] using WatchFiles
Process SpawnProcess-1:
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\multiprocessing\process.py", line 315, in _bootstrap
self.run()
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "F:\python\te\lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started
target(sockets=sockets)
File "F:\python\te\lib\site-packages\uvicorn\server.py", line 65, in run
return asyncio.run(self.serve(sockets=sockets))
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\asyncio\runners.py", line 44, in run
return loop.run_until_complete(main)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\asyncio\base_events.py", line 647, in run_until_complete
return future.result()
File "F:\python\te\lib\site-packages\uvicorn\server.py", line 69, in serve
await self._serve(sockets)
File "F:\python\te\lib\site-packages\uvicorn\server.py", line 76, in _serve
config.load()
File "F:\python\te\lib\site-packages\uvicorn\config.py", line 434, in load
self.loaded_app = import_from_string(self.app)
File "F:\python\te\lib\site-packages\uvicorn\importer.py", line 19, in import_from_string
module = importlib.import_module(module_str)
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.3568.0_x64__qbz5n2kfra8p0\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "F:\python\te\g6\main.py", line 22, in <module>
from core.routers import router as template_router
File "F:\python\te\g6\core\routers.py", line 5, in <module>
from bbs.board import router as board_router
File "F:\python\te\g6\bbs\board.py", line 27, in <module>
from service.board import (
File "F:\python\te\g6\service\board\__init__.py", line 1, in <module>
from .board import BoardService
File "F:\python\te\g6\service\board\board.py", line 20, in <module>
from lib.slowapi.create_post_limit.limiter import validate_slowapi_create_post
File "F:\python\te\g6\lib\slowapi\__init__.py", line 10, in <module>
class CustomConfig(Config):
File "F:\python\te\g6\lib\slowapi\__init__.py", line 12, in CustomConfig
def _read_file(self, file_name: str | Path) -> dict[str, str]:
TypeError: unsupported operand type(s) for |: 'type' and 'type'
답변 2
순정 상태에서 실행이 안된다면
서버 상태가 그누보드6의 요구사항 부합되지 않아서 그렇습니다.
- def _read_file(self, file_name: str | Path) -> dict[str, str]:
이 코드의 에러 같습니다.
※ 문제는 Python 버전 호환성 때문입니다.
코드에서 사용된 |
연산자는 Python 3.10 이상에서 지원되는 새로운 유형 힌팅 구문으로,
Python 3.9에서는 지원되지 않아 str | Path
와 같은 표현을 사용할 수 없습니다.
이를 해결하려면 Python을 3.10 이상으로 업그레이드하거나,
기존 코드를 수정하여 typing
모듈의 Union
을 사용하는 방식으로 변경해야 합니다.
예를 들어, from typing import Union
과 from pathlib import Path
를 임포트한 뒤,
def _read_file(self, file_name: Union[str, Path]) -> dict[str, str]:
이와 같이 수정하면 Python 3.9에서도 호환될 수 있습니다.
♣ 해결 방법~
- 아래는, Python 3.10 이상으로 업그레이드 라이브러리의 코드를 수정하지 않고,
현재 환경의 Python 버전을 3.10 이상으로 업그레이드합니다.
- lib/slowapi/__init__.py
파일을 열어,
_read_file
메서드의 정의를 아래와 같이 수정합니다.
from typing import Union
from pathlib import Path
def _read_file(self, file_name: Union[str, Path]) -> dict[str, str]:
- slowapi
라이브러리를 최신 버전으로 업데이트합니다
pip install --upgrade slowapi
♣ Python 3.10 이상으로 업그레이드하는 것이 가장 간단하며,
위의 예시는, 라이브러리 업데이트 또는 직접 수정을 통해 문제를 해결하는 것입니다.
!-->!-->