[c++] Zagnieżdżanie Pythona

0

Mam mały problem, w skrócie najlepiej można go opisać tak:

Najpierw struktura plików:

Test
 |_main.cpp
 \_hel.py

Plik hel.py

def hello():
  print "Hello World!"

Plik main.cpp

#include <python2.5/Python.h>

int main(int, char **) {
  Py_Initialize();

  PyRun_SimpleString("import hel");
  PyRun_SimpleString("hel.hello()");

  Py_Finalize();
  return 0;
}

Kompiluje:

 g++ main.cpp -l python2.5

Kompilacja przebiega bez problemow, ale po uruchomieniu programu:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named hel
Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'hel' is not defined

Wie ktoś co z tym zrobić ?

Problem jest bardziej złożony, bo używam biblioteki BOOST.Python, ale można go sprowadzić to przykładu, który przedstawilem

0

podejrzewam runtime pythona nie ma ustawionego srodowiska - informacji gdzie ma szukac modulow. zwykle takie rzeczy sie trzyma w zmiennych srodowiskowych - ale skoro normlanie skrypt Ci chodzi, wiec pewnie je juz masz ustawione.. moze tutaj trzeba jakos wstepnie poinformowac boost pythona gdzie lezy instaacja pythona? zreszta, najpierw sprawdz envs Twojego programu czy na pewno dostal wlasciwy environment

0
quetzalcoatl napisał(a)

zreszta, najpierw sprawdz envs Twojego programu czy na pewno dostal wlasciwy environment

co dokładnie rozumiesz przez to ? Ścieżki są poprawne, bez problemowo można załadować takie moduły jak np os. Gdy utworzę plik wewnątrz programu c++ korzystając z pythona , zapisuje się on w katalogu, z którego program zostałuruchomiony. Dzisiaj sprawdzilem na dwóch innych komputerah, z różnymi konfiguracjami i problem ten sam ...

0

Znalazłem rozwiązanie

Pomogło dodanie

  PyRun_SimpleString("import sys");
  PyRun_SimpleString("sys.path.append(\".\")");

//q: jak juz zdazylem powiedziec.. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1