我有一个这样的批处理文件,用于创建和激活 python 虚拟环境并安装一些软件包
创建.bat:
mkdir "%CD%\.venv"
python -m venv .venv
call .venv\Scripts\activate
python -m pip install --upgrade pip
第三行是使用批处理的调用命令运行的批处理文件。我得到的结果是:
E:\test>create.bat
E:\test>mkdir "E:\test\.venv"
E:\test>python -m venv .venv
E:\test>call .venv\Scripts\activate
Collecting pip
Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.0.3
Uninstalling pip-19.0.3:
Successfully uninstalled pip-19.0.3
Successfully installed pip-20.0.2
但是,正如您所看到的,运行最后一行时我没有看到我期望的典型提示文本:
...
(.venv) E:\test\> python -m pip install --upgrade pip
它只是打印剩余操作的输出。通常这不会有问题,但稍后的一项任务是要求输入的 Python 脚本,但所有内容都被忽略并在没有询问的情况下运行。
作为参考,如果我逐个手动输入命令,我将添加输出:
E:\test>mkdir "%CD%\.venv"
E:\test>python -m venv .venv
E:\test>call .venv\Scripts\activate
(.venv) E:\test>python -m pip install --upgrade pip
Collecting pip
Using cached https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.0.3
Uninstalling pip-19.0.3:
Successfully uninstalled pip-19.0.3
Successfully installed pip-20.0.2
答案1
我自己找到了答案。我没想太多,因为我调用的批处理脚本是 Python 自动生成的脚本。但它包含了这一行
@echo off
一开始。当它再次返回到我的脚本时,这个命令当然仍然有效。通过将脚本重写为:
mkdir "%CD%\.venv"
python -m venv .venv
call .venv\Scripts\activate
@echo on
python -m pip install --upgrade pip