从 C++/Qt 程序在 Windows 中运行 Anaconda 脚本

Posted

技术标签:

【中文标题】从 C++/Qt 程序在 Windows 中运行 Anaconda 脚本【英文标题】:Run Anaconda script in Windows from C++/Qt program 【发布时间】:2020-06-09 15:56:02 【问题描述】:

好吧,奇怪的事情。这在 Linux 中工作得很好,但我无法让它在 Windows 中工作。问题可能是我这些天没有经常在 Windows 中工作......

我有一个要从 C++/Qt 程序运行的 Python 脚本。所以我安装了 Anaconda 并在“Anaconda Prompt”中通过 pip 安装了包含脚本的包。我有 Python 脚本的完整路径(在包的 setup.py 中定义为 entry_point,所以它实际上是一个 exe 文件)并尝试像这样启动它:

proc = new QProcess(this);
connect(proc, &QProcess::readyReadStandardError, this, &MainWindow::receivedText);
connect(proc, &QProcess::readyReadStandardOutput, this, &MainWindow::receivedText);
proc->start(python_script, arguments);

其中 python_script 和 arguments 是 python 脚本及其参数的完整路径。当我从“Anaconda Prompt”运行它时,它工作正常,但从我的 Qt 程序中我得到一个“NumPy 未安装”错误,尽管它肯定已安装。难道是我必须先以某种方式运行“conda activate”吗?抱歉,我对 Anaconda 不是很熟悉,只能在 Windows 中使用它……我该怎么做? 谢谢!

【问题讨论】:

使用 conda activate 会发生什么? 在 Linux 中我会说我需要一个 shell,我可以在其中首先调用“conda activate”,然后调用脚本。我假设我可以将两者都写入批处理/powershell 脚本,但这包括将另一个文件写入磁盘。还是您的意思是在普通外壳中使用它?我没有让 Anaconda 在安装时设置 PATH,所以这不起作用。还是有必要这样做?我希望安装的脚本会像在 Linux 中一样设置路径... 好的,再玩一下。现在的主要问题是:如何在没有 shell 的情况下激活 anaconda? 【参考方案1】:

你能从你的代码中打开一个dos提示shell吗?如果是这样,您可以让 anaconda 在该 shell 中启动,然后运行您的 conda activate 命令等。

试试这个命令看看这是否是一个选项,您可能需要根据您使用的 anaconda 应用程序更改 miniconda3 的路径:

%windir%\System32\cmd.exe "/K" C:\Users\user\miniconda3\Scripts\activate.bat C:\Users\user\miniconda3

【讨论】:

谢谢,但我实际上想避免这种情况,而是直接阅读 stdout/stderr...【参考方案2】:

找到一个可行的方法:我可以通过 Python 解释器将它作为“python.exe script.exe 参数”运行,而不是直接将脚本作为“script.exe 参数”调用,这似乎很好用。

【讨论】:

【参考方案3】:

我在切换服务器时总是遇到同样的问题,所以发布一个对我总是有效的解决方案:

conda install -c conda-forge 隐式

【讨论】:

以上是关于从 C++/Qt 程序在 Windows 中运行 Anaconda 脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中从命令提示符运行 QT 应用程序

如何从 C++/Qt 中的 .exe 和 .dlls 中读取图标(在 Windows 上)?

运行在Windows在Qt项目问题,怎么解决

从 main 运行 Urho3D 和 Qt

如何在没有依赖关系的 Windows 中构建 Qt-5 应用程序

使用 C++\Qt 从当前窗口中获取选定的文本