В настоящее время я создаю файл bash для многократного тестирования программы. Программа включает в себя PythonC, реализованные внутри c ++, когда я обычно вызываю файл ./lpopt -f File
, он работает полностью нормально. Однако, если я включу эту же строку в сценарий bash, он не сможет импортировать модуль. Нужно ли мне указывать bash путь python отдельно? если да, то как?
вот часть моего кода, которая имеет дело с PythonC Import
#include <python2.7/Python.h>
#include <iostream>
#include <algorithm>
#include "predictor.hpp"
using namespace std;
predictor::predictor()
{
Py_Initialize();
pName = PyString_FromString("predictor");
pModule = PyImport_Import(pName);
if (pModule == nullptr) {
PyErr_Print();
std::cerr << "Fails to import the module predictor, check installation.\n";
}
EDIT: Я забыл добавить сценарий bash. Строка, создающая ошибку: $ LPOPT_PRD -f $ d / encoding. asp> $ LPOPTPRDENCODING
#!/bin/bash
LPOPT='/home/danielb/Downloads/src/FLPOPT/bin/lpopt'
LPOPT_PRD='/home/danielb/Documents/LpoptVersions/bin/lpopt'
d=$1
mkdir -p "/home/danielb/Downloads/ModifiedEncodings/${d}"
LPOPTENCODING="/home/danielb/Downloads/ModifiedEncodings/${d}/${d}Lpopt.asp"
LPOPTPRDENCODING="/home/danielb/Downloads/ModifiedEncodings/${d}/${d}LpoptPrd.asp"
$LPOPT -f $d/encoding.asp > $LPOPTENCODING
$LPOPT_PRD -f $d/encoding.asp > $LPOPTPRDENCODING
for instance in $(find ${PWD}/${d} -name '*-*'); do
LPEN=$(gringo $LPOPTENCODING $instance | wc -l)
printf "%s,%s\n" $(echo $instance | cut -d '/' -f 7 | cut -d '-' -f 1) $LPEN >> "/home/danielb/Downloads/ModifiedEncodings/${d}/LpoptInstanceStats.txt"
LPPRDEN=$(gringo $LPOPTPRDENCODING $instance | wc -l)
printf "%s,%s\n" $(echo $instance | cut -d '/' -f 7 | cut -d '-' -f 1) $LPPRDEN >> "/home/danielb/Downloads/ModifiedEncodings/${d}/LpoptPrdInstanceStats.txt"
EN=$(gringo $d/encoding.asp $instance | wc -l)
echo $EN
printf "%s,%s\n" $(echo $instance | cut -d '/' -f 7 | cut -d '-' -f 1) $EN >> "/home/danielb/Downloads/ModifiedEncodings/${d}/InstanceStats.txt"
echo "Completed instance"
done
Вот прикрепленная команда с сообщением об ошибке
sudo bash TestingScript.sh KnightTourWithHoles
[sudo] password for danielb:
ImportError: No module named predictor
Fails to import the module predictor, check installation.
TestingScript.sh: line 13: 7121 Segmentation fault (core dumped) $LPOPT_PRD -f $d/encoding.asp > $LPOPTPRDENCODING
Дополнительно только в если это помогает, то модуль, который я импортирую, находится в немного другом каталоге, чем пакеты сайта. Для справки
>>> print(predictor.__file__)
/home/danielb/miniconda2/lib/python2.7/site-packages/predictor-0.0.0-py2.7.egg/predictor.pyc
>>> import time
>>> print(time.__file__)
/home/danielb/miniconda2/lib/python2.7/lib-dynload/time.so