2014-05-09 2 views
1

저는 C++과 파이썬 코드를 결합한 파이썬 확장 모듈을 만들려고합니다. 지금까지 파이썬 코드를 잘 실행할 수 있었지만 파이썬 객체가 모듈 가져 오기의 일부로 나타나지 않았다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 여기C++과 Python 코드를 boost :: python 확장 모듈에 올바르게 결합하는 방법은 무엇입니까?

내 C++ 모듈에 대한 예제 코드 (나는 명확성을 위해 C++ 기능과 클래스를 바인딩 C++/부스트 :: 파이썬 코드 생략하고) : 내가하려고하면

#include <boost/python.hpp> 
BOOST_PYTHON_MODULE(my_module) { 
    <... some boost::python code to bind C++ classes/functions ...> 
    boost::python::object main_module = boost::python::import("__main__"); 
    boost::python::object main_namespace = main_module.attr("__dict__”); 
    boost::python::exec("aaa = 'ABC’\n”, main_namespace, main_namespace); 
} 

그리고 나중에 파이썬을 :

import my_module 
print my_module.aaa <— error! 

(나는 자신의 파일에 파이썬 파일과 C++ 동적 libs와 분리 할 수 ​​있다는 것을 알고 있으며 모든 작업을하지만, 난 정말 다른 기술적 인 이유에 대한 하나 개의 파일로 내 확장 모듈을 필요로)

답변

1
boost::python::scope().attr("aaa")="ABC"; 
+0

예,이 해결 방법에 대해 알고 있지만 제 모듈에서 타사에서 개발 한 임의의 Python 코드를 실제로 실행하려고합니다. 지금까지 나는 더미 서브 모듈을 만들고 파이썬을 실행하고 모든 오브젝트를 복사하려고 시도했다. * 거의 * 작동한다. ("import something"과 "from something something thing"은 그런 식으로 복사되지 않는다.) – WorkPerNap

+0

@WorkPerNap :하지만 my_module의 네임 스페이스가 아닌 주 모듈의 네임 스페이스를 수정합니다. – refi64

관련 문제