Пакетный эквивалент "источника" в Windows: как запустить скрипт Python из virtualenv

Итак, я выполнил довольно много сценариев bash, но очень мало пакетных сценариев в Windows. Я пытаюсь активировать python virtualenv, запустить скрипт python, а затем деактивировать virtualenv при выходе из скрипта.

У меня есть папка с именем env, которая является моим virtualenv, и папка с именем work, которая содержит мои сценарии

Вот что у меня так далеко:

%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate

Однако когда я запускаю скрипт, он активирует virtualenv, а затем останавливается. Он не попадает на вторую строку и запускает скрипт Python. Есть ли какой-нибудь способ "найти" папку сценария активации, чтобы остальная часть пакетного сценария могла быть запущена так, как если бы я вызывал activ.bat из командной строки?

3 ответа

Решение

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

call %~dp0env\Scripts\activate.bat

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

Я сделал файл.lnk, который указывает на cmd /k "path/to the/script/activate.bat" и это работает.

CMD параметры и опции

Я полагаю, просто хочу выполнить те же команды в Windows, как и в Linux Bash / Shell. Когда я хочу запустить virtualenv, я нахожусь в самом верхнем каталоге, команда linux будет "source bin / activ". Это не проблема для имитации этого поведения в Windows. Лично я поместил имя командного файла activ.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
Другие вопросы по тегам