Python «модуль не найден» или «относительный путь без родителя» или «нет модуля с именем » несогласованные ошибки

#python #ubuntu #visual-studio-code #wsl-2

Вопрос:

Я потратил 6 часов, пытаясь решить проблему импорта, которая выглядела примерно так:

Каталог:

 workspace
workspace/src
workspace/src/app/main.py
workspace/src/app/__init__.py
workspace/src/app/api/api_v1.py
workspace/src/app/api/__init__.py
 

main.py

 from app.api.api_v1 import api_router
 

api.py

 from fastapi import APIRouter
api_router = APIRouter()
 

Ошибки при попытке запуска main.py:

  1. из app.api.api_v1 импорт api_router > модуль приложения не найден
  2. из .api.api_v1 импорт api_router > относительный импорт, но без родительского модуля
  3. из api.api_v1 импортируйте api_router > это работает, но линтинг не работает

Затем я добавляю дополнительные пути к настройкам .vscode:

 {
    "python.analysis.extraPaths": ["./src/app"]
}
 

Я запускал WSL2 в Windows с файлами на подключенном диске, но переместил его на домашний диск на удаленном устройстве Linux WSL: /mnt/c/james > /home/james/ ~$

Мой вопрос в том, как получилось, что я бегу main.py и это дало ошибку 1, а затем буквально запустив ее снова, сразу же выдает ошибку 2? Затем добавление дополнительных путей не имеет значения, а затем на следующее утро я перезагрузил свой ноутбук, и все волшебным образом сработало?

Мне хочется плакать…

Ответ №1:

похоже, что ответ может заключаться в том, что мне нужно изменить каталог, в котором я запускаю main.py из терминала:

это не работает:

 ~workspace/$ main.py
 

это работает:

 ~workspace/$ cd src/
~workspace/src/$ main.py
 

Комментарии:

1. Еще одна вещь, которую я делаю, — это комментирую, сохраняю или раскомментирую и сохраняю настройки .vscode, которые предоставляют python дополнительные маршруты путей. Это заставляет vscode повторно проверять все пакеты снова. Работает хорошо.