2017-10-10 3 views
0

에 평을 가져 오는 방법 :부스트 파이썬 내 MAIN.CPP 수입 파이썬 파일

bp::object main  = bp::import("__main__"); 
    bp::object globals = main.attr("__dict__"); 
    bp::object module = import("strategy", "strategy.py", globals); 
    bp::object Strategy = module.attr("Strategy"); 
    bp::object strategy = Strategy(); 

하지만 난 strategy.py에 내가 가지고, 어떤 자기 평 파일을 정의 가져올 :

from model import Model 

File "strategy.py", line 2, in <module> 
from model import Model 
ImportError: No module named model 

내가 부스트 파이썬 가져 오기가 잘 작동하지 않고 strategy.py을 테스트, 내가 그것을 어떻게 해결할 수 : 내가 ./main 실행할 때

, 그것은 오류를 준다? 댄에

+0

이 아마도 당신이의 위치를 ​​추가해야 그 .py 파일을'sys.path'에? –

+0

나는 똑같은 것을 생각하고있다. 문제는, 만약 내가이 파일들을 다른 PC에 복사한다면, 수동으로 그것들을 sys.path에 복사해야만한다는 것이다. –

+0

나는 automagic 솔루션을 염두에두고있다. 이 계획을 어떻게 세우려는지 자세히 설명해 주시겠습니까? 분명히 바이너리, strategy.py 스크립트와 그 의존성이 있습니다. | 예를 들어, 파이썬을 내장 한 내 응용 프로그램 중 하나에서 루트 스크립트 디렉토리와 기본 스크립트 이름을 구성에 전달한 다음 main()을 가져 오기 전에 [this] (https://pastebin.com/5Y85yd0J)와 같이 실행합니다. 스크립트는 간단한'bp :: import (name.c_str())'(스크립트 디렉토리에있는 많은 의존성을 가져옵니다)를 사용합니다. –

답변

0

덕분에, 나는 자동으로 시스템 경로에 현재 디렉토리를 복사하려면이 같은 끝낼 :

bp::object sys_module = bp::import("sys"); 
bp::str module_directory = getDir().c_str(); 
sys_module.attr("path").attr("insert")(1, module_directory); 

getDir() 함수 :

std::string getDir() // get current directory path 
{ 
    char cCurrentPath[FILENAME_MAX]; 
    if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath))){ 
     return ""; 
    } 
    cCurrentPath[sizeof(cCurrentPath) - 1] = '\0'; 

    return std::string(cCurrentPath); 
}