在Windows上等价于“source”:如何从virtualenv运行python脚本

所以,我已经做了一些bash脚本,但是Windows上的批处理脚本很less。 我试图激活一个python virtualenv,运行一个python脚本,然后在脚本退出时closuresvirtualenv。

我有一个名为env的文件夹,这是我的virtualenv,还有一个名为work的文件夹,其中包含我的脚本

这是我到目前为止:

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

但是,当我运行脚本时,它会激活virtualenv然后停止。 它不会到达第二行并运行Python脚本。 有没有什么办法来“激活”激活脚本文件夹,以便批处理脚本的其余部分可以像我从命令行调用activate.bat一样运行?

我想说你只需要在你的activate.bat调用中加上“call”,以确保激活执行后当前的batch file被恢复:

 call %~dp0env\Scripts\activate.bat 

考虑为deactivate.bat做同样的事情。 此外,如果要确保当前的cmd.exe环境不会受到对batch file的调用的污染,请考虑将您的命令包装在setlocal / endlocal命令对中。

我做了一个.lnk文件,指向cmd /k "path/to the/script/activate.bat" ,它的工作原理。

CMD参数和选项

我想只是想在Windows中执行相同的命令,就像在Linux bash / shell中预期的一样。 当我想要启动一个virtualenv时,我实际上在它的顶层目录中,linux命令将是“源bin / activate”。 在Windows中模拟这种行为是没有问题的。 我个人而言,我已经把一个batch file名称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