I’ve done a fair bit of bash scripting, but very little batch scripting on Windows. I’m trying to activate a Python virtualenv, run a Python script, then deactivate the virtualenv when the script exits.
I’ve got a folder called env, which is my virtualenv, and a folder called work, which contains my scripts.
This is what I’ve got so far:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
However, when I run the script, it activates the virtualenv then stops. It does not get to the second line and run the Python script. Is there a way to “source” the activate script folder, so that the rest of the batch script can be run as if I’d called activate.bat from the command line?
I’d say you just need to prepend ‘call’ to your activate.bat invocation, to ensure that the current batch file is resumed after activate is executed:
Consider doing the same for
deactivate.bat. Furthermore, if you want to ensure that the current cmd.exe environment is not polluted by a call to your batch file, consider wrapping your commands in asetlocal/endlocalcommand pair.