VSCode - запуск файла Python в терминале и pythonpath - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь понять поведение VSCode в отношении запуска скриптов Python, хранящихся в подпакетах проекта. Если у меня есть структура проекта, подобная следующей:

proj/
  util/
  main/hello.py
test/

Если hello.py импортирует из proj.util - и я использую «Запуск файла Python в терминале», чтобы выполнить скрипт, он завершается неудачно с модулем не найден (proj.util) - потому что по умолчанию каталог верхнего уровня проекта не добавляется к питону. Если я создаю файл .env в корневом каталоге и добавляю определение для PYTHONPATH, чтобы включить в него каталог верхнего уровня моего проекта, этот файл также не используется при запуске с помощью указанной выше опции.

Если я создаю набор запусков отладки по умолчанию и использую «текущий файл debug-Python в терминале» - это прочитает файл .env и будет работать как положено.

PyCharm автоматически добавляет каталог проекта верхнего уровня в sys.paths при запуске скрипта в терминале - разве VSCode не должен предоставлять такую ​​опцию или я что-то упустил?

Текущая версия выглядит следующим образом, хотя я вижу то же поведение под Windows.

Version: 1.30.1
Commit: dea8705087adb1b5e5ae1d9123278e178656186a
Date: 2018-12-18T22:23:23.072Z
Electron: 2.0.16
Chrome: 61.0.3163.100
Node.js: 8.9.3
V8: 6.1.534.41
OS: Linux x64 4.19.12-arch1-1-ARCH

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Просто добавьте эти строки в начало файла, который вы хотите выполнить

if __name__ == "__main__":
    import os
    import sys
    sys.path.append(os.getcwd())

Эти сценарии добавляют каталог, в котором находится файл, к вашему пути при непосредственном выполнении, что означает __name__ == "__main__".

0 голосов
/ 08 января 2019

Когда у вас Python запускает hello.py, PVSC использует терминал для запуска python proj/main/hello.py. Для Python это то же самое, что запуск python hello.py из каталога proj/main, что означает для интерпретатора, что он даже не видит пакеты, в которых содержится hello.py (следовательно, поэтому он не имеет понятия proj.util).

Файл .env не используется, потому что файл снова является прямым выполнением в терминале, и ни ваш терминал, ни Python не читает файл .env. Но когда вы используете отладчик, мы получаем возможность указать такие детали, как использование файла .env и, следовательно, почему отладчик устанавливает PYTHONPATH так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...