我已经做了相当多的bash脚本,但在Windows上只做了很少的批处理脚本。我正在尝试激活一个Python virtualenv,运行一个Python脚本,然后在脚本退出时停用这个virtualenv。
我有一个名为env的文件夹,这是我的virtualenv,还有一个名为work的文件夹,其中包含我的脚本。
这是我到目前为止所得到的:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate但是,当我运行脚本时,它激活了virtualenv,然后停止。它不会转到第二行并运行Python脚本。有没有办法“源化”激活脚本文件夹,这样批处理脚本的其余部分就可以像我从命令行调用activate.bat一样运行?
发布于 2011-07-22 04:20:02
我想说的是,你只需要在你的activate.bat调用前加上'call‘,以确保在执行activate之后当前的批处理文件被恢复:
call %~dp0env\Scripts\activate.bat考虑对deactivate.bat执行同样的操作。此外,如果希望确保对批处理文件的调用不会污染当前的cmd.exe环境,请考虑将命令包装在setlocal/endlocal命令对中。
发布于 2012-04-25 08:20:23
我制作了一个指向cmd /k "path/to the/script/activate.bat"的.lnk文件,它可以正常工作。
发布于 2012-07-27 22:35:50
我想您只需要在Windows中执行与在Linux Bash/shell中期望的相同的命令即可。当我想要启动一个virtualenv时,我实际上是在它的顶层目录中,Linux命令应该是"source bin/activate“。
在Windows上模拟这种行为是没有问题的。就我个人而言,我在PATH环境变量中放置了一个名为activate.bat的批处理文件,如下所示:
:: 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 :eofhttps://stackoverflow.com/questions/6781799
复制相似问题