Ошибка импорта vscode для модуля python
Я пытаюсь сделать импорт в python с одного уровня каталога вверх.
import sys
sys.path.append('..')
from cn_modules import exception
Я получаю сообщение об ошибке от VSCode, когда пытаюсь выполнить задачу запуска сборки как:
ImportError: нет модуля с именем cn_modules
Тот же код работает без каких-либо ошибок с терминала (python).
Я сталкиваюсь с проблемой, когда пытаюсь запустить ее из задачи VBSode Run Build.
Вы знаете, что здесь не так?
Провели немного времени, но не смогли это решить. Любая помощь приветствуется.
ПРИМЕЧАНИЕ. Это работает, когда я делаю debug с помощью vscode. Ниже приведена моя конфигурация для launch.json и tasks.json
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python Console App",
"type": "python",
"request": "launch",
"stopOnEntry": true,
"program": "${file}",
"externalConsole": true,
"debugOptions": [
"WaitOnAbnormalExit",
"WaitOnNormalExit"
],
"env": {},
"envFile": "${workspaceRoot}/.env",
"console":"integratedTerminal",
"pythonPath": "${config:python.pythonPath}"
}
]
}
tasks.json
{
"version": "0.1.0",
"command": "/usr/bin/python",
"isShellCommand": true,
"args": ["${file}"],
"showOutput": "always",
"env": {},
"envFile": "${workspaceRoot}/.env",
"pythonPath": "${config:python.pythonPath}"
}
Ответы
Ответ 1
Я попытался добавить это в моем launch.json
, тогда это работает!
"env": {"PYTHONPATH": "${workspaceRoot}"}
ниже мой launch.json
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"cwd": "${workspaceRoot}",
"env": {"PYTHONPATH": "${workspaceRoot}"},
"console": "integratedTerminal"
Жаль, что это может помочь тебе! :)
Ответ 2
Спасибо хонза кальфус джанкальфус
Я заметил, что если я использую Файл → Закрыть папку, а затем Файл → Открыть папку... и снова открываю папку проекта, ошибки исчезают. Если я просто перезапущу VS Code, я получу ошибки. Я предполагаю, что очищен какой-то внутренний кеш?
Нашел здесь https://github.com/Microsoft/vscode/issues/10391
Ответ 3
Это решение помогает мне решить эту проблему навсегда. Шаги приведены ниже.
- Нажмите "Ctrl + Shift + P"
- Тип: "Настройка параметров для конкретного языка"
- Затем выберите "Python"
- "settings.json" откроется. Проверьте в этом файле json, есть ли такая строка: {"python.jediEnabled": false} (нажмите "Ctrl + F", а затем вставьте указанную выше ссылку, чтобы быстро ее найти)
- Если да, то удалите или закомментируйте эту строку, сохраните файл и перезагрузите VScode.
- СДЕЛАННЫЙ!
Ответ 4
В моем случае это никак не связано с
"env": {"PYTHONPATH": "${workspaceRoot}"}
Вот моя структура папок/модулей:
/Dev/csproj/deploy/test.py
/Dev/csproj/util/utils.py
и в test.py, он импортирует функцию утилит
import sys
sys.path.append('../')
from util.utils import get_keyvault_secret
Это не проблема, если я запускаю test.py в папке терминала /Dev/csproj/deploy/.
Но если я хочу отладить test.py, я получаю исключение "ModuleNotFoundError"
Чтобы исправить это, я добавляю это в мою конфигурацию отладки launch.json
"cwd": "${workspaceRoot}\\Dev\\csproj\\deploy",
Ответ 5
В файле launch.json можно попробовать настроить env: {}, как "env":
{"PYTHONPATH":"${workspaceRoot}"}