[英]Batch equivalent of "source" on Windows: how to run a Python script from a virtualenv
我已經編寫了相當多的 bash 腳本,但在 Windows 上編寫的批處理腳本很少。 我正在嘗試激活 Python virtualenv,運行 Python 腳本,然后在腳本退出時停用 virtualenv。
我有一個名為env
的文件夾,這是我的 virtualenv,還有一個名為 work 的文件夾,其中包含我的腳本。
這是我到目前為止所得到的:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
但是,當我運行腳本時,它會激活 virtualenv 然后停止。 它沒有到達第二行並運行 Python 腳本。 有沒有辦法“獲取”激活腳本文件夾,以便批處理腳本的 rest 可以像我從命令行調用activate.bat
一樣運行?
我想說你只需要在你的 activate.bat 調用前面加上“調用”,以確保在執行激活后恢復當前的批處理文件:
call %~dp0env\Scripts\activate.bat
考慮對deactivate.bat
做同樣的事情。 此外,如果您想確保當前 cmd.exe 環境不會被批處理文件的調用污染,請考慮將您的命令包裝在setlocal
/ endlocal
命令對中。
我制作了一個指向cmd /k "path/to the/script/activate.bat"
.lnk 文件,它可以工作。
我想您只想在 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.