簡體   English   中英

Windows 上的“源”批處理等效項:如何從 virtualenv 運行 Python 腳本

[英]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 文件,它可以工作。

CMD 參數和選項

我想您只想在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM