实现原理

  1. 新建Microsoft.PowerShell_profile.ps1一个文件,文件名字是win10配置文件的指定用名,
    当启动ps的时候会自动读取$PROFILE的配置文件并执行,

  2. 在脚本中写入逻辑:检测该目录下是否存在 .venv 目录,如果存在则尝试执行激活.venv目录下虚拟环境脚本,
    来激活虚拟环境,且当切换目录也会检测,但前提会检测目录是否有.venv文件夹,且创建虚拟环境的时候要统一虚拟环境的名字,
    或者修改脚本检测文件夹名字来实现自动激活虚拟环境,

使用简述

  1. 在powershell执行$PROFILE查看配置脚本路径,(只是输出脚本路径,并不真的存在这个文件)
    所以要自己创建,使用创建脚本或自己创建这个文件

  2. 把脚本内容的代码贴入进去,即可完成配置,

  3. 在指定目录进入ps,测试是否进入了虚拟环境.

脚本代码

创建文件脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 确保目录存在
$profileDir = Split-Path $PROFILE -Parent
if (-not (Test-Path $profileDir)) {
New-Item -ItemType Directory -Path $profileDir -Force
}

# 创建配置文件
if (-not (Test-Path $PROFILE)) {
New-Item -ItemType File -Path $PROFILE -Force
Write-Host "配置文件已创建: $PROFILE" -ForegroundColor Green
}

# 用记事本打开
notepad $PROFILE

配置文件脚本,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 启动时打印加载痕迹(保留)
Write-Host "========================================" -ForegroundColor Yellow
Write-Host "📌 配置文件已自动执行:$PROFILE" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Yellow

# 核心激活检测函数(逻辑不变,无阻塞)
function CheckAndActivateVenv {
param(
[string]$TargetDir = (Get-Location).Path # 支持传入指定目录
)
$activateScript = Join-Path -Path $TargetDir -ChildPath ".venv\Scripts\Activate.ps1"

if (-not (Test-Path -Path $activateScript -PathType Leaf)) {
return
}

if ($env:VIRTUAL_ENV) {
return
}

try {
# PowerShell的source等价写法,无阻塞执行
. $activateScript
Write-Host "✅ 已激活目录[$TargetDir]的.venv虚拟环境" -ForegroundColor Green
}
catch {
Write-Host "❌ 激活[$TargetDir]的.venv失败:$_" -ForegroundColor Red
}
}

# 重写cd命令:切换目录时立即检测(无阻塞)
function cd {
param([string]$path)
if ($path) { Set-Location -Path $path } else { Set-Location }
CheckAndActivateVenv # 切换后检测当前目录
}

# 重写Prompt函数:每次显示提示符时检测虚拟环境
# 解决配置文件执行时工作目录尚未切换到目标目录的问题
function Prompt {
# 每次显示提示符前检测当前目录的虚拟环境
CheckAndActivateVenv

# 保持默认PowerShell提示符格式
"PS $($executionContext.SessionState.Path.CurrentLocation)\> "
}

# 配置文件结束时,使用Start-Sleep延迟检测,确保工作目录已切换
# 解决右键菜单启动时工作目录切换时机问题
Write-Host "✅ 配置文件执行完成,终端可正常输入命令" -ForegroundColor Green

# 延迟检测当前目录的虚拟环境(不阻塞终端)
Start-Sleep -Milliseconds 100 -ErrorAction SilentlyContinue
CheckAndActivateVenv