Проект FastAPI не видит модули (ModuleNotFoundError: No module named 'shemas')
Uvicorn при запуске проекта не видит модули (Сам Python модули видит):
Работаю в VS Code, перед запуском uvicorn всегда запускаю venv и в самом VS code выбран интерпретатор моего окружения
Сам код запускаю так:uvicorn app.main:app --reload
Полный текст ошибки:
Traceback (most recent call last):
File "C:\Users\sith8\AppData\Local\Programs\Python\Python312\Lib\multiprocessing\process.py", line 314, in _bootstrap
self.run()
File "C:\Users\sith8\AppData\Local\Programs\Python\Python312\Lib\multiprocessing\process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\_subprocess.py", line 80, in subprocess_started
target(sockets=sockets)
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\server.py", line 65, in run
return asyncio.run(self.serve(sockets=sockets))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\sith8\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "C:\Users\sith8\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\sith8\AppData\Local\Programs\Python\Python312\Lib\asyncio\base_events.py", line 685, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\server.py", line 69, in serve
await self._serve(sockets)
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\server.py", line 76, in _serve
config.load()
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\config.py", line 434, in load
self.loaded_app = import_from_string(self.app)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\importer.py", line 22, in import_from_string
raise exc from None
File "C:\Users\sith8\PycharmProjects\FastAPI_new\.env\Lib\site-packages\uvicorn\importer.py", line 19, in import_from_string
module = importlib.import_module(module_str)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\sith8\AppData\Local\Programs\Python\Python312\Lib\importlib\__init__.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 995, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "C:\Users\sith8\PycharmProjects\FastAPI_new\app\main.py", line 8, in <module>
from app.users.router import router as router_users
File "C:\Users\sith8\PycharmProjects\FastAPI_new\app\users\router.py", line 2, in <module>
from shemas import SUserRegister
ModuleNotFoundError: No module named 'shemas'
Прошу помочь мне решить эту проблему.
Ответы (1 шт):
У вас код внутри пакета, поэтому нужно делать импорт не просто по имени, а относительный или абсолютный импорт.
Абсолютный импорт выглядит так:
from app.users.shemas import SUserRegister
Т.е. указывается полный "путь" внутри пакета от app
до модуля shemas
. Обычно рекомендуют использовать именно абсолютный импорт.
Относительный импорт будет выглядеть так:
from .shemas import SUserRegister
Точка перед shemas
обязательна, она обозначает, что модуль нужно искать в текущей папке (пакете). Две точки означали бы, что нужно подняться на уровень выше, искать модуль в пакете app
. Три точки тут уже не сработали, потому что это был бы выход из пакета app
, а он у вас самый корневой (но в целом при более глубокой вложенности три и более точки тоже возможны).