私はかなりのbashスクリプトを作成しましたが、Windowsではバッチスクリプトをほとんど実行していません。 Python virtualenvをアクティブにしようとしていますPythonスクリプトを実行し、スクリプトが終了したらvirtualenvを非アクティブにします。
私のvirtualenvであるenv
というフォルダーと、スクリプトが含まれているworkというフォルダーがあります。
これは私がこれまでに得たものです:
%~dp0env\Scripts\activate.bat
python %~dp0work\script.py
deactivate
しかし、スクリプトを実行すると、virtualenvがアクティブになり、停止します。これは2行目に到達せず、Pythonスクリプトを実行します。アクティブ化スクリプトフォルダーを「ソース」して、残りのバッチスクリプトを、が呼び出されましたactivate.bat
コマンドラインから?
Activate.batの呼び出しに「call」を付加するだけで、activateの実行後に現在のバッチファイルが確実に再開されるようにできます。
call %~dp0env\Scripts\activate.bat
deactivate.bat
についても同じことを検討してください。さらに、現在のcmd.exe環境がバッチファイルの呼び出しによって汚染されないようにする場合は、コマンドをsetlocal
/endlocal
コマンドペアでラップすることを検討してください。
私はcmd /k "path/to the/script/activate.bat"
を指す.lnkファイルを作成しました。
Linux Bash/Shellで期待されているのと同じように、Windowsでも同じコマンドを実行したいと思います。 virtualenvを起動したいときは、実際にはその最上位ディレクトリにいるので、Linuxコマンドは「source bin/activate」になります。
Windowsでこの動作をシミュレートしても問題ありません。私個人的には、activate.bat
という名前のバッチファイルを、次のようにPATH環境変数のどこかに配置しました。
:: 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