Batch equivalent of "source" on Windows: how to run a Python script from a virtualenv


Question

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?

1
39
3/27/2019 10:00:25 AM

Accepted Answer

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:

call %~dp0env\Scripts\activate.bat

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 a setlocal/endlocal command pair.

58
3/27/2019 10:01:00 AM

I made a .lnk file that points to cmd /k "path/to the/script/activate.bat", and it works.

CMD parameters & options


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon