Запуск скрипта на Python с модулем gurobipy из qt - PullRequest
0 голосов
/ 29 октября 2019

Я хочу запустить скрипт Python из Qt, когда пользователь нажимает кнопку. Этот скрипт правильно работает в терминале, но я получаю ошибку при выполнении из Qt.

Я попытался выполнить сценарий из Pycharm IDE, и я получаю ту же ошибку:

Traceback (most recent call last):
  File "/home/ana/PycharmProjects/Gurobi/one_set.py", line 1, in <module>
   from gurobipy import *
  File "/usr/local/lib/python2.7/dist-packages/gurobipy/__init__.py", line 1, in <module>
    from .gurobipy import *
ImportError: libgurobi81.so: cannot open shared object file: No such file or directory

Когда я выполняю «import gurobipy» в консоли Python, я не получаю ошибки.

import gurobipy

import pkg_resources

pkg_resources.get_distribution ("gurobipy"). Версия

'8.1.1'

При поиске в libgurobi81.so я проверяю, существует ли этот файл в:

/opt/gurobi811/linux64/lib/libgurobi81.so

/usr/lib/python2.7/dist-packages/gurobi811/linux64/lib/libgurobi81.so

/usr/local/lib/python2.7/dist-packages/gurobipy/libgurobi81.so

Как указано в инструкциях по установке, я включил переменные средыв /home/usr/.bashrc как:

export GUROBI_HOME="/opt/gurobi811/linux64"

export PATH="${PATH}:${GUROBI_HOME}/bin"

export LD_LIBRARY_PATH="${GUROBI_HOME}/lib"

Я также включил другие каталоги, содержащие libgurobi81.so:

export PATH=$PATH:/usr/lib/python2.7/dist-packages/gurobi811/

export PATH=$PATH:/usr/local/lib/python2.7/dist-packages/gurobipy/

Однако из терминала все работает нормально, и я получаюрешение:

/ usr / bin / python2.7 /home/ana/PycharmProjects/Gurobi/one_set.py

Академическая лицензия - только для некоммерческого использования

 instance     objVal          time

Instance1.csv    0.030176      0.0002670288

 [1 rows x 2 columns]

Код, который я использую для запуска скрипта Python из Qt:

   QString  command("/usr/bin/python2.7");
   QStringList params = QStringList() << "/home/ana/PycharmProjects/Gurobi/one_set.py";

   QProcess *process = new QProcess();
   process->startDetached(command, params);
   process->waitForFinished();
   qDebug()<<process->readAllStandardOutput();
   process->close();

Я ожидал такой же вывод от Qt, как и от терминала, так как команда, которую я использую для его запуска, такая же: / usr /bin / python2.7 /home/ana/PycharmProjects/Gurobi/one_set.py

1 Ответ

0 голосов
/ 30 октября 2019

решаемая. Решением было добавление переменных среды перед началом процесса:

   QString  command("/usr/bin/python2.7");
   QStringList params = QStringList();
   params.append("/home/ana/PycharmProjects/Gurobi/one_set.py");


   QProcess *process = new QProcess();
   QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
   env.insert("LD_LIBRARY_PATH", "/usr/local/lib:/opt/gurobi811/linux64/lib:/opt/gurobi811/linux64/lib:/opt/gurobi811/linux64/lib/"); // Add an environment variable
   process->setProcessEnvironment(env);


   process->start(command, params);
   process->waitForFinished();
   QString p_stdout = process->readAllStandardOutput();
   ui->Output->setText(p_stdout);
   process->close();
...