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;
Iбыла та же самая ошибка как это: Qt, вызывающий python, используя 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 из терминала сpython hello.py
./Users/johan/anaconda3/bin/python
- это вывод which python
.Я предполагаю, что у меня есть правильный путь для PYTHONHOME, но я все еще получаю ошибку.
Python error: " File \"/Users/johan/anaconda3/lib/python3.7/site.py\", line 177\n file=sys.stderr)\n ^\nSyntaxError: invalid syntax\n"
Теперь это та же ошибка, что и эта: Использование нескольких версий Python
Но добавление предложенного #!python3
в сценарий не помогло.Я также пытался #!/Users/johan/anaconda3/bin/python
.
После поисков в течение нескольких часов, теперь я действительно не знаю, как решить эту проблему.Как мне указать запуск с Python 3?Любая помощь приветствуется.
Я думаю, что это, вероятно, все еще проблема пути.Пожалуйста, объясните мне, что я не понимаю о PATH в целом.Я знаю, что PATH - это место, где оболочка ищет исполняемый файл.Но почему мы вставляем сюда PYTHONPATH и PYTHONHOME, а не просто добавляем их в PATH?Для чего нужны PYTHONPATH и PYTHONHOME?(Я прочитал документацию PYTHONHOME , но я не понимаю.)
EDIT (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()