У меня есть проект Python, который предназначен для работы в Linux:
#!/usr/bin/env python3
def hello(a: str):
print(f"bonjour {a}")
hello("SO")
Когда я редактирую этот код в Windows с кодом Visual Studio и запускаю его, я получаю
[Running] /usr/bin/env python3 "d:\Seafile\dev\dev-perso\domotiqueNG\services\dispatcher\hello.py"
The system cannot find the path specified.
Если Visual Studio Code на самом деле использует shebang, ошибка понятна: не существует ни env
ни python3
.
Как мне настроить Visual Studio Code так, чтобы он не учитывал shebang и скорее использовал исполняемый файл C:\Python36\python.exe
?
Я нашел в настройках Python: Python Path
и установил его в свой исполняемый файл, но с присутствием shebang, shebang имеет приоритет
Я удалил shebang, чтобы попробовать эту версию (это не решение, мне нужно держать shebang там) и, что интересно, я получил:
[Running] python -u "d:\Seafile\dev\dev-perso\domotiqueNG\services\dispatcher\hello.py"
File "d:\Seafile\dev\dev-perso\domotiqueNG\services\dispatcher\hello.py", line 2
def hello(a: str):
^
SyntaxError: invalid syntax
Это странно, поскольку кажется, что компилятор не распознает синтаксис Python 3.6, в то время как Python 3.6 является тем, который находится на пути (на компьютере есть два других исполняемых файла Python 2, даже на пути).
Код Visual Studio предлагает использовать 3,6:
Поэтому я подозреваю, что есть где-то настройка исполняемого пути Python, которую я мог бы настроить.
Использование или отсутствие shebang можно настроить в настройках: поиск shebang
, а затем Code-runner: Respect Shebang
При запуске кода через Ctrl F5 использовался правильный интерпретатор.
При запуске через Alt Ctrl N (Run Code
) использовался неправильный.
Я проверил
import sys
print(sys.executable)
и по какой-то причине был показан интерпретатор Platform.io. Я не знаю, как это закончилось в Run Code
но отключение Platform.io помогло. Оба Alt Ctrl N и Ctrl F5 теперь используют правильный интерпретатор.
Я до сих пор не знаю, почему оба способа запуска сценария используют разные интерпретаторы, но по крайней мере проблема решена на данный момент.