You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Popen启动的Shell中完成conda init并激活环境执行脚本?

问题:Qt中Popen执行conda activate命令失败

我在Qt中尝试使用Popen执行Shell命令,想要激活名为alphapose的conda虚拟环境并运行inference.py,代码如下:

QString srtttt = "conda activate alphapose;cd;cd AlphaPose-pytorch-1.11 ;python scripts/demo_inference.py ";
FILE* fp = popen(srtttt.toLocal8Bit().data(), "r");

但出现如下错误:

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

补充说明:普通终端中可正常运行conda activate等命令,仅Popen启动的Shell无法正常初始化;在该Shell中执行conda env list或conda能得到正确输出,但执行conda init会显示no change and no action taking。


解决方案

方案1:使用conda run直接指定环境执行命令

不需要激活环境,直接用conda run命令指定目标环境运行脚本,避免shell初始化问题。修改后的命令如下(注意替换为你的AlphaPose绝对路径):

QString srtttt = "conda run -n alphapose python /absolute/path/to/AlphaPose-pytorch-1.11/scripts/demo_inference.py";
FILE* fp = popen(srtttt.toLocal8Bit().data(), "r");

优点:无需处理shell初始化,命令简洁可靠。

方案2:手动加载conda初始化脚本

Popen启动的是非交互式shell,不会自动加载conda的初始化配置,可在命令开头手动source初始化脚本:

// 替换为你的conda安装路径,比如anaconda3/miniconda3
QString srtttt = "source ~/miniconda3/etc/profile.d/conda.sh; conda activate alphapose; cd /absolute/path/to/AlphaPose-pytorch-1.11; python scripts/demo_inference.py";
FILE* fp = popen(srtttt.toLocal8Bit().data(), "r");

原理:手动加载conda的环境配置脚本,让shell识别conda activate命令。

方案3:启动交互式shell执行命令

强制Popen启动交互式bash,使其自动加载初始化配置:

QString srtttt = "bash -i -c \"conda activate alphapose; cd /absolute/path/to/AlphaPose-pytorch-1.11; python scripts/demo_inference.py\"";
FILE* fp = popen(srtttt.toLocal8Bit().data(), "r");

注意:交互式shell可能会输出额外的初始化信息,需处理输出内容。


内容的提问来源于stack exchange,提问作者Alan810

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:55:23