升级PowerShell 7.5.0后Invoke-Conda无法捕获参数的解决办法
PowerShell 7.5.0 与 Conda 兼容性问题修复
问题现象
升级PowerShell到7.5.0后,Conda命令无法正常识别参数,执行conda --version会触发如下错误:
base 3.12.8 ➜ conda --version usage: conda-script.py [-h] [-v] [--no-plugins] [-V] COMMAND ... conda-script.py: error: argument COMMAND: invalid choice: '' (choose from activate, clean, commands, compare, config, create, deactivate, env, export, info, init, install, list, notices, package, content-trust, doctor, repoquery, remove, uninstall, rename, run, search, update, upgrade)
降级回PowerShell 7.4.5后,conda activate等命令恢复正常:
base 3.12.8 ➜ pwsh --version PowerShell 7.4.5 base 3.12.8 ➜ conda activate mvd-3d mvd-3d 3.10.11 ➜
问题原因
PowerShell 7.5.0对函数参数处理逻辑做了调整,导致Conda模块中的Invoke-Conda函数误将以-开头的选项参数(如--version)当作子命令处理,进而触发参数无效的错误。
修改方案
打开%USERPROFILE%\miniconda3\shell\condabin\Conda.psm1文件,找到Invoke-Conda函数,替换为以下代码:
function Invoke-Conda() { # 检测是否存在以'-'开头的选项参数,这类参数直接传递给原生conda.exe $hasFlagArgs = $Args | Where-Object { $_ -match '^-' } | Select-Object -First 1 if ($hasFlagArgs -or $Args.Count -eq 0) { # 无参数或含选项参数时,直接调用conda原生程序 & $Env:CONDA_EXE $Env:_CE_M $Env:_CE_CONDA @Args } else { $Command = $Args[0]; $OtherArgs = if ($Args.Count -ge 2) { $Args[1..($Args.Count - 1)] } else { @() } switch ($Command) { "activate" { Enter-CondaEnvironment @OtherArgs; } "deactivate" { Exit-CondaEnvironment; } default { # 其他子命令直接传递给原生conda程序 & $Env:CONDA_EXE $Env:_CE_M $Env:_CE_CONDA $Command @OtherArgs; } } } }
修改说明
- 新增参数判断逻辑:识别以
-开头的选项参数,直接绕过子命令判断,传递给原生Conda程序 - 保留原有的
activate/deactivate子命令处理逻辑,确保环境激活功能正常运作
验证步骤
修改后重启PowerShell,执行以下命令验证修复效果:
conda --version:正常输出Conda版本号conda activate <你的环境名>:正常激活目标环境conda list:正常列出当前环境的包列表
内容的提问来源于stack exchange,提问作者SaturnTsen
相关产品推荐
相关产品推荐

