Запуск скрипта python с модулем gurobipy из qt

Я хочу запускать скрипт 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, я не получаю ошибки.

импортные гуробипы

импортировать pkg_resources

pkg_resources.get_distribution ("гуробипы"). версия

'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


person Ana    schedule 29.10.2019    source источник


Ответы (1)


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

   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();
person Ana    schedule 30.10.2019