首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows上"source“的批处理等价物:如何从虚拟环境运行Python脚本

问Windows上"source“的批处理等价物:如何从虚拟环境运行Python脚本
EN

Stack Overflow用户
提问于 2011-07-22 03:43:05
回答 3查看 28.4K关注 0票数 41

我已经做了相当多的bash脚本,但在Windows上只做了很少的批处理脚本。我正在尝试激活一个Python virtualenv,运行一个Python脚本,然后在脚本退出时停用这个virtualenv。

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

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

代码语言:javascript
复制
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-22 04:20:02

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

代码语言:javascript
复制
call %~dp0env\Scripts\activate.bat

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

票数 62
EN

Stack Overflow用户

发布于 2012-04-25 08:20:23

我制作了一个指向cmd /k "path/to the/script/activate.bat"的.lnk文件,它可以正常工作。

CMD parameters & options

票数 6
EN

Stack Overflow用户

发布于 2012-07-27 22:35:50

我想您只需要在Windows中执行与在Linux Bash/shell中期望的相同的命令即可。当我想要启动一个virtualenv时,我实际上是在它的顶层目录中,Linux命令应该是"source bin/activate“。

在Windows上模拟这种行为是没有问题的。就我个人而言,我在PATH环境变量中放置了一个名为activate.bat的批处理文件,如下所示:

代码语言:javascript
复制
:: 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6781799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档