首页 文章

在Windows上批量等效的“源”:如何从virtualenv运行python脚本

提问于
浏览
38

所以,我已经完成了一些bash脚本,但在Windows上只有很少的批处理脚本 . 我正在尝试激活python virtualenv,运行python脚本,然后在脚本退出时停用virtualenv .

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

这是我到目前为止所得到的:

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

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

3 回答

  • 2

    我想只想在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 :eof
    
  • 6

    我要说你只需要在你的activate.bat调用前加上'call',以确保在执行activate后恢复当前的批处理文件:

    call %~dp0env\Scripts\activate.bat
    

    考虑对deactivate.bat做同样的事情 . 此外,如果要确保调用批处理文件不会污染当前cmd.exe环境,请考虑将命令包装在 setlocal / endlocal 命令对中 .

  • 57

    我制作了一个指向 cmd /k "path/to the/script/activate.bat" 的.lnk文件并且它有效 .

    CMD parameters & options

相关问题