Как решить проблему с импортами без sys.path в python в VS Code
По какой-то причине, работая в PyCharm
, я не сталкивался так часто с проблемой импортов, как в VS Code
. И кажется это связано с тем, что я пользовался пакетным менеджером pdm
, который заботливо указывал родительскую директорию проекта как рабочую и указывал интерпретатору Python
, по каким каталогам можно гулять и где искать нужные модули при импорте. Если я ошибаюсь, то прошу меня поправить.
С недавнего времени я начал пользоваться IDE
VS Code
и пакетным менеджером poetry
. И теперь возникает проблема импортов при следующей структуре проекта:
project_directory
|
+--app
|
+-- A
+-- module_A.py
+-- utils
+-- __init__.py
+-- delay.py
Соответственно, если я пытаюсь импортировать функцию из модуля delay.py
в module_A.py
следующим образом
from app.utils.delay import function_delay
Возникает следующая ошибка
ModuleNotFoundError: No module named 'app'
Ни абсолютные, ни относительные импорты не помогают, а к sys.path
прибегать не хочется, ибо кастыльно.
Можно ли в pyproject.toml
указать как-то путь к родительской директории проекта, чтобы интерпретатор наконец понял, где искать и смог нормально распознавать директории, которые находятся внутри проекта? Или может есть другой способ указать в настройках VS Code
?
Если вы знаете, почему вообще в питоне возникает проблема с импортами?
Ответы (1 шт):
Вам нужно каким-то образом сообщить интерпретатору Пайтона, что корень вашего проекта должен быть добавлен в sys.path
.
Я пользуюсь для этого переменной PYTHONPATH
. Есть два способа запуска интерпретатора, и, соответственно, как минимум два способа задать эту переменную.
- Запуск по кнопке
▷
. В свежих версиях VS Code по этой кнопке запускается майкрософтовый отладчикdebugpy
. Его конфигурация управляется через.vscode/launch.json
. Добавьте в этот файл такой объект:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Debugger: Current File",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"env": {
"PYTHONPATH": "${workspaceFolder}"
}
}
]
}
Есть список конфигураций уже есть, добавьте настройки debugpy
в список configurations
.
- Второй способ - запускать Пайтон из командной строки. Для того, чтобы
PYTHONPATH
автоматически добавлялся в терминал, нужно настроитьterminal.integrated.env.<OS>
(вместо подставьтеlinux
,windows
,osx
) в.vscode/settings.json
:
"terminal.integrated.env.windows": {
"PYTHONPATH": "${workspaceFolder}"
}
Либо, чтобы два раза не вставать и не прописывать это для каждого прокта, можно настроить глобально:
- Откройте настройки
- Введите в строке поиска
terminal.integrated.env.
- Убедитесь, что настройки для
User
- Выберите
terminal.integrated.env.<ваша ОС>
- Кликните
Edit in settings.json
- Ручками впишите ассоциацию
"PYTHONPATH": "${workspaceFolder}"
Профит. Когда бы вы ни запустили терминал в VS Code, там будет переменная PYTHONPATH, настроенная на корень проекта.