使用 activate.ps1 脚本而不是 activate.bat 和 virtualenvwrapper

Use activate.ps1 script instead of activate.bat with virtualenvwrapper

我正在尝试在 Windows 中设置我的开发环境(我知道..我知道..)。 Cmder 使用 PowerShell 并使其更加舒适。然而 Virtualenv 仍然有点麻烦,virtualenvwrapper 据说可以让它更容易一些。

但是,virtualenvwrapper 在其 workon.bat 命令中使用了 activate.bat,PowerShell 存在一些问题。自从 1.7.1 (2012-02-16) 以来,virtualenv 支持开箱即用的 Powershell 并提供了自己的 activate.ps1 脚本,该脚本运行良好,我想改用它。

workon.bat中的相关部分:

if not exist "%WORKON_HOME%\%VENV%\Scripts\activate.bat" (
    echo.
    echo.    %WORKON_HOME%\%VENV%
    echo.    doesn't contain a virtualenv ^(yet^).
    echo.    Create it with "mkvirtualenv %VENV%"
    goto END
)

call "%WORKON_HOME%\%VENV%\Scripts\activate.bat"
if defined WORKON_OLDTITLE (
    title %1 ^(VirtualEnv^)
)

简单地将 activate.bat 替换为 activate.ps1 是行不通的(根据设置的默认程序打开一个新的 shell 或我的编辑器)而且我从来没有批量做过任何事情,这就是我卡住的原因。

基本上,你只需要

& "$env:WORKON_HOME$env:VENV\Scripts\activate.ps1"

假设 activate.ps1activate.bat 在同一文件夹中。其他批处理命令仅用于在 activate.bat 不存在时显示一些帮助文本,以及用于更改 window 标题。如果你也想在 PowerShell 中使用后者,你可以这样做 like this:

if ($env:WORKON_OLDTITLE) {
  $host.ui.RawUI.WindowTitle = $args[0] + ' (VirtualEnv)'
}