Добавление пакета Python в путь для терминала VSCode - PullRequest
0 голосов
/ 05 ноября 2019

Я пишу классы Python в пакете, используя VScode. Я хочу добавить родительский каталог этого пакета в путь Python при использовании терминала VScode, чтобы я мог import пакет (независимо от каталога запускаемого файла).

Я пробовал .env Файл и настройки рабочего пространства без успеха.

В конечном итоге я хочу запустить doctest для классов, использующих терминал, и для этого терминал должен иметь возможность импортировать пакет.

.env File

У меня есть рабочее пространство. Сначала я попытался добавить файл .env следующим образом (обратите внимание, что я использую Python 3 Anaconda на Windows ):

PYTHONPATH=C:\\MyPython;${PYTHONPATH}

(я пробовал одинарные и двойные обратные слэши икосая черта, ничего не работает).

Когда я запускаю скрипт (test.py) в терминале, содержащем это:

print(os.environ.get('PYTHONPATH'))

Я просто возвращаюсь None.

Я попытался установить общесистемную переменную среды PYTHONPATH в Windows, которая затем появляется, но C: \ MyPython к ней не добавляется. Я не хочу добавлять / изменять системный PYTHONPATH каждый раз, когда открываю другое рабочее пространство!

Настройки рабочего пространства

Затем я попытался добавить настройки рабочего пространства в MyProject.code-workspace file:

{
    "folders": [
        {
            "path": "C:\\MyPython"
        }
    ],
    "settings": {
        "terminal.integrated.cwd": "C:\\MyPython",
        "terminal.integrated.env.windows": "C:\\MyPython"
    }
}

Опять же, это не сработало.

Структура файла

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

C:\MyPython
    .env
    MyProject.code-workspace
    test.py
    Pkg\
        __init__.py
        Class1.py
        Class2.py

Если я использую зеленую кнопку треугольника («Запуск файла в терминале Python») для запуска test.py, тогда каталог этого файла (C:\MyPython) добавляется к sys.path, и все работает (например, import Pkg.Class1 работает).

Однако, если я запускаю Class2.py (который включает в себя import Pkg.Class1 в коде и doctest), тогда вместо каталога C:\MyPython\Pkg добавляется sys.path, и он не может найти и импортировать пакет Pkg иdoctest терпит неудачу.

Поэтому я хочу добавить C:\MyPython к пути python, независимо от каталога запускаемого файла.

Конечно, я мог бы простодобавьте все тесты в test.py и запустите его, но я действительно хочу запустить doctests в классе, над которым я работаю,Вместо того, чтобы каждый раз запускать все тесты (и переключаться на другой файл, чтобы сделать это).

Кажется, это должно быть легко, но я не могу заставить его работать!

Любые идеи?

PS: я не включил .py код для теста или классов, так как это не имеет отношения к проблеме, это import, что не удается. В конечном итоге я вижу, что требуемый каталог не появляется ни в sys.path, ни в os.environ.get('PYTHONPATH'), и поэтому импорт не выполняется.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Итак, две вещи. Во-первых, Python не предназначен для того, чтобы вы выполняли файлы, содержащиеся в пакетах, поэтому вы несколько не согласны с его дизайном, пытаясь заставить эту работу работать. Было бы лучше сделать что-то вроде использования -m флага Python, чтобы делать то, что вы хотите, например, python -m Pkg.Class2. Таким образом, вам не нужно манипулировать вашими путями для запуска модуля, содержащегося в вашем пакете.

Во-вторых, вы были очень близки в получении того, что вам нужно, с вашими настройками, но вы случайно использовали строку вместообъект для указания переменных среды для вашего терминала. То, что вы хотели, было:

"terminal.integrated.env.windows": {"PYTHONPATH": "C:\\MyPython"}
0 голосов
/ 05 ноября 2019

Терминал VScode совпадает с терминалом Windows, поэтому вы можете добавить его вручную. нажмите winkey + S и введите «env», выберите «Изменить системные переменные среды». выберите «переменные среды». отредактируйте переменную с именем «path» как для пользователя, так и для системы. введите путь, который вы хотите добавить в него. не забудьте перезапустить весь терминал после редактирования.

...