63 lines
1.8 KiB
PowerShell
63 lines
1.8 KiB
PowerShell
if (Get-Module posh-venv) { return }
|
|
|
|
function CompleteVenvName {
|
|
param($commandName, $parameterName, $wordToComplete,
|
|
$commandAst, $fakeBoundParameters)
|
|
|
|
Get-ChildItem -Directory $env:WORKON_HOME
|
|
| ForEach-Object { $_.Name }
|
|
| Where-Object { $_ -Like "$wordToComplete*" }
|
|
| Sort-Object
|
|
}
|
|
|
|
|
|
function venv {
|
|
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidateSet("list", "activate", "deactivate")]
|
|
$command,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[ArgumentCompleter({ CompleteVenvName @args })]
|
|
$venv)
|
|
switch ($command) {
|
|
"list" {
|
|
@(Get-ChildItem -Directory $env:WORKON_HOME | ForEach-Object {
|
|
$name = $_.Name
|
|
$version = (& "$_/Scripts/python.exe" --version).Replace("Python ", "")
|
|
@{Name = $name; Version = $version; Path = $_ }
|
|
}) | ForEach-Object {
|
|
New-Object object | Add-Member -NotePropertyMembers $_ -PassThru
|
|
}
|
|
}
|
|
|
|
"activate" {
|
|
if (Test-Path "$env:WORKON_HOME/$venv/Scripts/activate.ps1") {
|
|
& "$env:WORKON_HOME/$venv/Scripts/activate.ps1"
|
|
}
|
|
elseif (Test-Path (Join-Path $PWD $venv)) {
|
|
& "$venv/Scripts/activate.ps1"
|
|
}
|
|
elseif ((!$venv -Or !$venv.Trim()) -And (Test-Path "venv/Scripts/activate.ps1")) {
|
|
& "venv/Scripts/activate.ps1"
|
|
}
|
|
else {
|
|
Write-Error "Environment '${venv}' does not exists."
|
|
}
|
|
}
|
|
|
|
"deactivate" {
|
|
deactivate
|
|
}
|
|
|
|
"list-python" {
|
|
py -0 | Select-Object -Skip 1
|
|
}
|
|
|
|
default {
|
|
Write-Error "Unknown venv command ${args[0]}."
|
|
}
|
|
}
|
|
}
|