当我们在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 系统禁止运行脚本
上一篇:190. 颠倒二进制位