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()

最佳答案

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

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

您还必须放置所使用的python二进制文件的路径:
p.start("/Users/johan/anaconda3/bin/python", params);

10-02 05:36