Loading... 最近学习了 virtualenv 这个 python 的虚拟环境之后,感觉开发起项目来是真的棒。它可以隔离系统的 python 环境来安装,让开发环境比较纯净,方便出精品。 比方说我有个 a 项目,它的执行的 python 脚本为 `a.py`,使用的对应虚拟环境名字为 aaa。此时,我们手工在 cmd 中调用的方式为。 首先打开 cmd,进入这个 a 项目所在的文件夹,然后激活相关的虚拟环境。 使用 `workon aaa` 命令来激活。 激活之后,使用 `python a.py` 命令来执行该项目程序。 这是手动的方案,那自动的呢?我就想到写一个 bat 脚本来实现先切换到虚拟环境,然后再执行该项目程序了。 为了简化,我们的 bat 脚本就存放在 a 项目的文件夹中,起名为 `b.bat`。 期初,我的 bat 文件是这样写的: ```shell @echo off workon aaa python a.py ``` 于是我开始运行 `b.bat` 文件(如果直接运行 bat 文件,需要在后面再加个 pause 看清楚输出结果,我这里再 cmd 中运行一下看),结果发现,他能够顺利进入 aaa 的虚拟环境,但却并没有运行 `a.py` 这个程序。 **这是为什么呢?** --- 因为啊,本质原因是因为 workon,activate 这样的命令,如果你到 virtualenv 中查看的话,也是一个 bat 文件,所以相当于是一个 bat 文件,调用了另一个 bat 文件,导致第一个 bat 文件中断。这里说的第一个 bat 是指的 `b.bat`,另一个 bat 指的是 `workon.bat`。为了让 `b.bat` 不中断,解决的方法很简单,就是在 workon 或 activate 前面加一个 call 就可以了。 所以最终代码变为: ```shell @echo off call workon aaa python a.py ``` 再次运行 `b.bat` 文件,我们就会发现我们进入了虚拟空间 aaa,并且 `a.py` 也能正常运行啦! 希望能帮到你哦~ 最后修改:2021 年 08 月 19 日 © 允许规范转载 赞 1 赠人玫瑰,手留余香