Подтвердить что ты не робот

Пакетный эквивалент "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 из командной строки?

4b9b3361

Ответ 1

Я бы сказал, вам просто нужно добавить "вызов" к вызову activ.bat, чтобы гарантировать, что текущий пакетный файл будет возобновлен после активации:

call %~dp0env\Scripts\activate.bat

Подумайте о том же, что и для deactivate.bat. Кроме того, если вы хотите, чтобы текущая среда cmd.exe не была загрязнена вызовом вашего командного файла, рассмотрите возможность объединения ваших команд в пару команд setlocal/endlocal.

Ответ 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