Python в VS Code: ошибка при импорте модуля из подпапки - PullRequest
0 голосов
/ 17 апреля 2020

Я недавно начал изучать VS Code для разработки кода Python, и у меня возникает проблема, когда я пытаюсь импортировать модуль из подпапки. Тот же самый код прекрасно работает, когда я выполняю его в записной книжке Jupyter (подпапки содержат файлы __init__.py et c.) Я полагаю, что я следовал инструкциям для правильной настройки расширения VS Python. Все остальное, кроме этой одной команды импорта, работает хорошо, но я не смог понять, что именно идет не так.

Структура проекта следующая: Папка root, которая установлена ​​как cwd содержит две подпапки (src и bld). src содержит файл py, который импортирует модуль, сохраненный в foo.py в папке bld с использованием from bld.foo import foo_function

При запуске файла я получаю следующую ошибку: ModuleNotFoundError: No module named ‘bld'. У меня установлено несколько сред Anaconda Python, и у меня одна и та же проблема. При копировании foo.py в каталог src и использовании from foo import foo_function все работает.

Мой launch.json файл выглядит следующим образом:

{
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Python: Current File (Integrated Terminal)",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "cwd": "${workspaceFolder}",
            "env": {"PYTHONPATH": "${workspaceFolder}:${workspaceFolder}/bld"},
            "console": "integratedTerminal"
        }
    ]
}

Любые идеи или помощь будут с благодарностью!

1 Ответ

0 голосов
/ 18 апреля 2020

Кажется, я наконец-то понял ответ сам: встроенный терминал не сканирует файл PYTHONPATH из файла .env. Однако при запуске файла во встроенном окне PYTHONPATH правильно берется из .env. Поэтому, чтобы запустить мой скрипт в терминале, мне пришлось добавить строку terminal.integrated.env.* в мой settings.json следующим образом:

{
    "python.pythonPath": "/anaconda3/envs/py36/bin/python",
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "python.linting.flake8Enabled": false,
    "python.envFile": "${workspaceFolder}/.env",
    "terminal.integrated.env.osx": {
        "PYTHONPATH": "${workspaceFolder}"
    }
}
...