Код Visual Studio - ModuleNotFoundError, другой sys.path в терминале и VSCode?

Я пытаюсь запустить код в коде Visual Studio, но продолжаю получать ошибку ModuleNotFoundError. Когда я запускаю код в своем терминале или в режиме отладки в VS с активированной средой conda, он работает нормально.

Система: Mac M1 12.3

Среда Conda, выбранная в Visual Studio Code.

я добавил это

import os
print('cwd is %s' %(os.getcwd()))
import sys
print('executable is %s' %(sys.executable))
print('path is %s' %(sys.path))

и запуск в терминале дает:

cwd is /Users/USERNAME/xyz/CodeFolder
executable is /Users/USERNAME/miniforge3/envs/conda_envNAME/bin/python
path is ['/Users/USERNAME/xyz/CodeFolder', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python38.zip', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8/lib-dynload', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8/site-packages']

запуск в VS через Запустить файл Python (кнопка в правом верхнем углу) дает:

cwd is /Users/USERNAME/xyz/CodeFolder
executable is /Users/USERNAME/miniforge3/bin/python
path is ['/Users/USERNAME/xyz/CodeFolder', '/Users/USERNAME/miniforge3/lib/python39.zip', '/Users/USERNAME/miniforge3/lib/python3.9', '/Users/USERNAME/miniforge3/lib/python3.9/lib-dynload', '/Users/USERNAME/miniforge3/lib/python3.9/site-packages']

запуск в VS через Отлаживать Файл Python (кнопка в правом верхнем углу) дает:

cwd is /Users/USERNAME/xyz/CodeFolder
executable is /Users/USERNAME/miniforge3/envs/conda_envNAME/bin/python
path is ['/Users/USERNAME/xyz/CodeFolder', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python38.zip', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8/lib-dynload', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8/site-packages']

Я в замешательстве - как я могу запустить это в VS Code?

---- Обновление от 23 марта 2022 г.:

у меня три варианта Код Visual Studio - ModuleNotFoundError, другой sys.path в терминале и VSCode?

Когда я добавляю

    "code-runner.executorMap": {

        "python": "$pythonPath -u $fullFileName"
        
    }

к

settings.json

(см. [https://www.wiseowl.co.uk/blog/s2930/module-not-found-error.htm] 2 от @Kyouya Sato)

и запускаю Выполнить код, он работает, и я также получаю

cwd is /Users/USERNAME/xyz/CodeFolder
executable is /Users/USERNAME/miniforge3/envs/conda_envNAME/bin/python
path is ['/Users/USERNAME/xyz/CodeFolder', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python38.zip', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8/lib-dynload', '/Users/USERNAME/miniforge3/envs/conda_envNAME/lib/python3.8/site-packages']

без изменения

settings.json

он также не работает с использованием Выполнить код.

Запустить файл Python вообще не работает.

sys.path должен ли нет иметь то же значение, что и sys.executable. Вы что-то сделали, чтобы изменить значение?
John Gordon 23.03.2022 00:21

Спасибо, я вручную редактировал имена и получил ошибку копирования - я редактировал исходный пост.

StefanOverFlow 23.03.2022 00:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы имеете в виду, когда используете код бегун? если ваш ответ да, проверьте это: https://www.wiseowl.co.uk/blog/s2930/module-not-found-error.htm

Спасибо, похоже, бегун кода исправлен. Но вариант по умолчанию (см. отредактированный пост) по-прежнему не работает.

StefanOverFlow 23.03.2022 09:03
Ответ принят как подходящий

Обходной путь:

  1. Установите для «python.terminal.activateEnvironment» значение false в файле settings.json.
  2. Перейдите на предыдущую версию расширения, которая работает нормально (избегайте conda run).
  3. Попробуйте следующий VSIX, в котором есть потенциальное исправление: https://github.com/microsoft/vscode-python/suites/5578467772/artifacts/180581906, используйте команду «Расширение: установка из VSIX», чтобы установить VSIX.

Причина:

У Conda есть некоторые проблемы:

  1. conda run -n MY-ENV python FILE.py использует базовый интерпретатор вместо интерпретатора среды.
  2. Запуск с использованием conda run внутри уже активированной среды должен быть таким же, как запустить его снаружи
  3. conda run не удаляет компоненты базовой среды из $ПУТЬ

@StefanOverFlow Вы решили проблему?

Steven-MSFT 25.03.2022 06:51

да - '"python.terminal.activateEnvironment": false' в 'settings.json' сделал свое дело! Спасибо!

StefanOverFlow 29.03.2022 20:56

Другие вопросы по теме