我有一個像這樣的批次文件,用於創建和激活 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