Как заставить пакетный файл работать в терминале vscode - PullRequest
2 голосов
/ 27 марта 2020

Я пытаюсь создать командный файл, который открывает виртуальную среду внутри vscode. Пока что код выглядит так:

if NOT exist ./env (
    pip3 install virtualenv 
    virtualenv env
)
.\env\Scripts\activate.ps1

Оператор if работает как положено, а команда после этого - нет. Однако, когда я запускаю программу в терминале по умолчанию для windows, она работает как положено.

Редактировать: Я знаю, что это, вероятно, не лучший способ написать программу, но я ' Я новичок в партии, и он работает, поэтому я доволен этим.

Редактировать 2: Позвольте мне попытаться лучше объяснить, в чем проблема. У меня при запуске программы в обычном терминале она работает просто отлично. Проблема в том, что я использую терминал в vscode. Если я пытаюсь просто запустить обычную команду в терминале, она говорит, что команда не найдена (введите имя файла). Когда я использую расширение для запуска кода, оно правильно запускает первые строки, но не активирует виртуальную среду

1 Ответ

1 голос
/ 30 марта 2020

Вы смешиваете командные файлы и powershell. Это две разные вещи. Суффикс пакетных файлов может быть либо .bat, либо .cmd. Файлы powershell обычно заканчиваются на .ps1.

. Пакетные файлы используют C:\WINDOWS\system32\cmd.exe. Powershell использует C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe. Как вы видите, это два разных интерпретатора.

Если вам нужно запустить файл .ps1, который представляет собой скрипт powershell, вам нужно запустить его в powershell , а не a .bat файл !

Чтобы выполнить ваш скрипт, вам нужно выполнить его следующим образом:

& 'C:\env\Scripts\activate.ps1'

Если вы запустите его на powershell, ваше условие if больше не будет работать. Вам нужно сделать что-то вроде этого:

$PipArgs = @('install', 'virtualenv') 
if(Test-Path -PathType leaf "C:\env"){
    & 'pip3' $PipArgs
    & 'virtualenv' 'env'
}
...