Пакетный эквивалент "source" на окнах: как запустить python script из virtualenv
Итак, я выполнил несколько сценариев bash, но очень мало командных сценариев в Windows. Я пытаюсь активировать python virtualenv, запускать python script, а затем деактивировать virtualenv, когда выйдет script.
У меня есть папка env, которая является моим virtualenv, и папка, называемая work, которая содержит мои скрипты
Это то, что у меня есть до сих пор:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
Однако, когда я запускаю script, он активирует virtualenv, затем останавливается. Он не попадает во вторую строку и запускает Python script. Есть ли способ "установить" активирующую папку script, чтобы остальная часть пакета script могла быть запущена, как если бы я вызвал activ.bat из командной строки?
Ответы
Ответ 1
Я бы сказал, вам просто нужно добавить "вызов" к вызову activ.bat, чтобы гарантировать, что текущий пакетный файл будет возобновлен после активации:
call %~dp0env\Scripts\activate.bat
Подумайте о том же, что и для deactivate.bat. Кроме того, если вы хотите, чтобы текущая среда cmd.exe не была загрязнена вызовом вашего командного файла, рассмотрите возможность объединения ваших команд в пару команд setlocal
/endlocal
.
Ответ 2
i создал файл .lnk, который указывает на cmd /k "path/to the/script/activate.bat"
, и он работает.
Параметры и параметры CMD
Ответ 3
Я предполагаю, что просто хочу перенести те же команды в окна, что и ожидалось в linux bash/shell.
Когда я хочу запустить virtualenv, я фактически нахожусь в своем верхнем каталоге, команда linux будет "source bin/activate".
Это не проблема для моделирования этого поведения в окнах. Я лично, я поставил имя файла пакета activate.bat где-то на PATH, как это:
:: activate.bat
@echo off
REM source bin/activate
if "%1" == "bin/activate" (
if not EXIST "%CD%\Scripts\activate.bat" goto notfound
set WRAPEX=Scripts\activate.bat
) ELSE (
set WRAPEX=%*
)
call %WRAPEX%
goto :eof
:notfound
echo Cannot find the activate script -- aborting.
goto :eof