В чем разница между запуском команды vscode в оболочке и командой, которая отображается в выводе? - PullRequest
3 голосов
/ 18 июня 2020

Я запускаю тестовое обнаружение в vscode с pytest в выходных данных показывает мне эту команду:

python /home/dave/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/testing_tools/run_adapter.py discover pytest -- --rootdir /home/dave/PythonProjects/pytest_test -s --cache-clear .

Выполнение этой команды в оболочке vscode приводит к ошибке импорта.

dave@dave-desktop  ~/PythonProjects/pytest_test   master  python /home/dave/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/testing_tools/run_adapter.py discover pytest -- --rootdir /home/dave/PythonProjects/pytest_test -s --cache-clear .
Traceback (most recent call last):
  File "/home/dave/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/testing_tools/run_adapter.py", line 17, in <module>
    from testing_tools.adapter.__main__ import parse_args, main
  File "/home/dave/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/testing_tools/adapter/__main__.py", line 9, in <module>
    from . import pytest, report
  File "/home/dave/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/testing_tools/adapter/pytest/__init__.py", line 7, in <module>
    from ._discovery import discover
  File "/home/dave/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/testing_tools/adapter/pytest/_discovery.py", line 8, in <module>
    import pytest
ImportError: No module named pytest

Почему появляется ошибка? Выполняется ли эта команда из другого каталога. Это очень неприятно, потому что у меня нет шанса проанализировать ошибку таким образом.

Ответы [ 2 ]

1 голос
/ 03 июля 2020

Я не мог понять, ответили ли вы в комментариях выше, была ли виртуальная среда активирована или нет. Может случиться так, что VSCode выполняет команду из места, где существуют исполняемый файл python и модуль pytest.

Один из вариантов - установить pytest глобально и посмотреть, поможет ли это (вы можете удалить его позже для очистки вашей системы, если необходимо).

В противном случае обязательно создайте виртуальную среду, активируйте ее и установите на ней pytest перед запуском вашей команды.

python3 -m venv /path/to/new/virtual/environment (e.g. ./venv)
./venv/bin/activate
pip3 install pytest

Кроме того, если вы иметь Python 2 и 3 в одной среде, что может вызвать конфликты. Можете ли вы проверить, правильная ли версия используется VSCode (я думаю, 3 из вашего примера)? Вы можете набрать Ctrl + Shift + p и выбрать «Python: Select Intepreter», чтобы выбрать правильную версию.

1 голос
/ 03 июля 2020

Вы, вероятно, фактически вызываете разные Python интерпретаторы / среды в каждом методе. VSCode docs скажем:

По умолчанию расширение Python ищет и использует первый Python интерпретатор, найденный в системном пути.

Но есть несколько способов переопределить это, выбор интерпретатора вручную является наиболее очевидным.

Для отладки я предлагаю вам временно поместить следующие строки в самый верх run_adapter.py (возможно, вы захотите вернуться сначала его, так как он является частью расширения VS-кода Python):

import sys
print(f'interpreter: {sys.executable}')

Это напечатает путь вашего интерпретатора непосредственно перед неудачей импорта.

Вы могли бы также хочу взглянуть на этот вопрос.

...