powershell下 workon命令不生效-解决
迪丽瓦拉
2025-05-28 09:07:51
0

当我们在windows下安装了python的虚拟环境管理包 virtualenvwrapper-win 后,使用 workon 命令的时候,只能在 cmd 命令窗口下使用,但是 powershell 下是不管用的,因为 workon的脚本只有bat,没有ps1的

经过查询解决方案,现将我目前收集到的方案做一个分享,希望能帮到有需要的小伙伴。

方案

首先要找到你的python包的 Scripts 路径,通过 ls 你可以看到
在这里插入图片描述

在同级目录下创建 workon.ps1 文件,并写入以下内容

if (-not (Test-Path env:WORKON_HOME))
{$WORKON_HOME = '~\Envs'
} else {$WORKON_HOME = ($env:WORKON_HOME).Replace('"','')
}if (-not (Test-Path env:VIRTUALENVWRAPPER_PROJECT_FILENAME)) {$VIRTUALENVWRAPPER_PROJECT_FILENAME = '.project'
} else {$VIRTUALENVWRAPPER_PROJECT_FILENAME = ($env:VIRTUALENVWRAPPER_PROJECT_FILENAME).Replace('"','')
}if ($args.length -eq 0) {echo "Pass a name to activate one of the following virtualenvs:"echo ==============================================================================(Get-ChildItem -Path $WORKON_HOME).Namereturn
}$VENV = $args[0]if (!(Test-Path -Path ("$($WORKON_HOME)\$($VENV)"))) {echo ("virtualenv $($VENV) does not exist")echo "Create it with 'mkvirtualenv $($VENV)'"return
}if (!(Test-Path -Path ("$($WORKON_HOME)\$($VENV)\Scripts\activate.ps1") ))  {echo "$($WORKON_HOME)$($VENV)"echo "doesn't contain a virtualenv (yet)."echo "Create it with 'mkvirtualenv $($VENV)'"return
}iex ("$($WORKON_HOME)\$($VENV)\Scripts\activate.ps1")if (Test-Path -Path ("$($WORKON_HOME)\$($VENV)\$($VIRTUALENVWRAPPER_PROJECT_FILENAME)")) {iex "cdproject"
}

现在目录结构如下:
在这里插入图片描述
然后我们就可以直接在powershell下使用了。

PS C:\personal_folder\software\Python\Python310> workon.ps1
Pass a name to activate one of the following virtualenvs:
==============================================================================
dev
torch
PS C:\personal_folder\software\Python\Python310> workon.ps1 dev
(dev) PS C:\personal_folder\software\Python\Python310>

可以发现已经ok了。

可能遇到的问题

可能当你创建完 workon.ps1 脚本后,出现 无法加载文件xxx.ps1,因为在此系统上禁止运行脚本...

你需要在 powershell的管理员模式下 执行 set-ExecutionPolicy RemoteSigned ,然后重新启动powershell就可以全局使用了。

参考资料

1. workon.ps1 脚本创建
2. xxx.ps1 系统禁止运行脚本

相关内容