Пакетный эквивалент «источника» в Windows: как запустить скрипт Python из virtualenv - PullRequest
38 голосов
/ 21 июля 2011

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

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

Это то, что я до сих пор получил:

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

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

Ответы [ 3 ]

57 голосов
/ 22 июля 2011

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

call %~dp0env\Scripts\activate.bat

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

6 голосов
/ 25 апреля 2012

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

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

2 голосов
/ 27 июля 2012

Полагаю, вы просто хотите выполнять в Windows те же команды, что и в Linux Bash / shell.Когда я хочу запустить virtualenv, я фактически нахожусь в его верхнем каталоге, и команда Linux будет "source bin / activ".

Нет проблем смоделировать это поведение в Windows.Лично я поместил командный файл с именем 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...