Ошибка импорта 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

Это решение помогает мне решить эту проблему навсегда. Шаги приведены ниже.

  1. Нажмите "Ctrl + Shift + P"
  2. Тип: "Настройка параметров для конкретного языка"
  3. Затем выберите "Python"
  4. "settings.json" откроется. Проверьте в этом файле json, есть ли такая строка: {"python.jediEnabled": false} (нажмите "Ctrl + F", а затем вставьте указанную выше ссылку, чтобы быстро ее найти)
  5. Если да, то удалите или закомментируйте эту строку, сохраните файл и перезагрузите VScode.
  6. СДЕЛАННЫЙ!

Ответ 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}"}