C ++ Qt:QProcess运行指定Python版本的Python脚本路径

时间:2018-11-15 18:17:46

标签: python c++ qt path

Qt Creator 4.7.1 基于Qt 5.11.2(Clang 8.0(Apple),64位)

我正在Qt中运行它。

QProcess p;
QStringList params;
params << "/Users/johan/Documents/testQt/hello.py";
p.start("python", params);
p.waitForFinished(-1);
qDebug() << "finished";
QString p_stdout = p.readAll();
qDebug() << p_stdout;
QString p_stderr = p.readAllStandardError();
if(!p_stderr.isEmpty())
   qDebug()<<"Python error:"<<p_stderr;

我起初有与此相同的错误:Qt calling python using QProcess

Python error: "ImportError: No module named site\r\n"  

我添加了:

QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert("PYTHONPATH", "/Users/johan/anaconda3/lib/python3.7");
env.insert("PYTHONHOME", "/Users/johan/anaconda3/bin/python");
p.setProcessEnvironment(env);

我可以使用python hello.py从终端直接运行python脚本。 /Users/johan/anaconda3/bin/pythonwhich python的输出。我想我有正确的PYTHONHOME路径,但是仍然出现错误。

Python error: "  File \"/Users/johan/anaconda3/lib/python3.7/site.py\", line 177\n    file=sys.stderr)\n        ^\nSyntaxError: invalid syntax\n"

现在这是与此相同的错误:Using multiple versions of Python

但是在脚本中添加建议的#!python3并没有帮助。我也尝试过#!/Users/johan/anaconda3/bin/python

经过几个小时的搜索,现在我真的不知道该如何解决。如何指定要与Python 3一起运行?任何帮助表示赞赏。

我想这可能仍然是路径问题。请教育我对PATH的一般理解。我知道PATH是shell在其中寻找可执行文件的地方。但是为什么我们要在这里插入PYTHONPATH和PYTHONHOME而不是仅将其添加到PATH? PYTHONPATH和PYTHONHOME分别用于什么? (我读过PYTHONHOME documentation,但我听不懂。)

编辑(hello.py用于测试包导入):

import time
import sys
import os
import tensorflow as tf
import numpy as np
import time
import inspect
import cv2

def main():
    time.sleep(1)
    print(os.path)
    print(sys.version_info[0])
    print("hello")

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

PYTHONPATH中必须有模块的路径(因此最小值为site-packages),因此解决方案是:

env.insert("PYTHONPATH", "/Users/johan/anaconda3/lib/python3.7/site-packages")

您还必须放置所使用的python二进制文件的路径:

p.start("/Users/johan/anaconda3/bin/python", params);