2012-05-31 3 views
0

파이썬 부스트 모듈 :가져 오기 내가 파이썬 모듈에 몇 가지 기능을 내보낼 파이썬 :: 부스트 VS2010에서 DLL을 구축

myDLL.cpp : 여기까지

std::string greet() { return "hello, world"; } 
int square(int number) { return number * number; } 

BOOST_PYTHON_MODULE(getting_started1) 
{ 
    // Add regular functions to the module. 
    def("greet", greet); 
    def("square", square); 
} 

은 모든 것이 잘 컴파일 . 다음 C : \ myDLL \ Debug myDLL.dll 및 myDLL.lib 파일을 가져옵니다.

은 (http://wiki.python.org/moin/boost.python/SimpleExample) 문서를 높일 따르면, 나는 PYTHONPATH이를 추가해야합니다, 그래서 C를 추가 : \ myDLL 디버그 \ 그것에 : PYTHONPATH를 : C : \ Python27; c : \ myDLL \ Debug;

후, 내 평 파일에서, 나는 그것을 가져 오려고 : 종류의

import getting_started1 
print getting_started1.greet() 
number = 11 
print number, '*', number, '=', getting_started1.square(number) 
나는 또한 myDLL 가져 오기 getting_started1에서 시도

및 getting_started1 수입 *에서, 모든 가능한 조합을.

누구나 내 모듈을 어떻게 호출해야하는지 알려주실 수 있습니까? 감사합니다

EDIT : cgohlke에 따르면, VS에서 컴파일 할 때 내 PYTHONPATH 어딘가에 getting_started1.pyd가 있어야합니까? 이 파일은 존재하지 않습니다 ... VS2010에서 다른 모양을 설정해야합니까? 기본 Win32 DLL 프로젝트가 있습니다. 그러나 부스트 의사는 "우리가이 공유 라이브러리를 만들고이를 우리의 PYTHONPATH에두면", Windows의 공유 라이브러리가 DLL이 아닌가? ergo, DLL은 PYTHONPATH에 있어야합니까?

답변

2

파이썬 확장 기능을 빌드하는 표준 휴대용 방법은 distutils입니다. 그러나 Visual Studio 2010은 Python 2.7에서 지원되는 컴파일러가 아닙니다. 다음 setup.py는 나를 위해 Visual Studio 2008 및 boost_1_48_0에서 작동합니다. 빌드 명령은 python setup.py build_ext --inplace입니다. 당신의 비주얼 스튜디오 2010 프로젝트

# setup.py 
from distutils.core import setup 
from distutils.extension import Extension 
setup(name="getting_started1", 
    ext_modules=[ 
     Extension("getting_started1", ["getting_started1.cpp"], 
     include_dirs=['boost_1_48_0'], 
     libraries = ['boost_python-vc90-mt-1_48'], 
     extra_compile_args=['/EHsc', '/FD', '/DBOOST_ALL_DYN_LINK=1'] 
     ) 
    ]) 

, getting_started1.pyd 대신 myDLL.dll에 링커 출력 파일을 변경하려고.

+0

없이 수입에 Getting_Started #Dll 이름이 같은 비주얼 스튜디오 2013에 적용됩니다 , 부스트 python2 1.55 및 파이썬 2.7.9? – MMM

0
  1. 디버그가 아닌 릴리스 구성에서만 작동하도록했습니다. 당신은 파이썬 스크립트에서
  2. 했던 것처럼 프로젝트 속성에서
  3. 의 일반 탭에서, 당신은 같은 DLL의 위치를 ​​지정해야하는 dll을 실제로해야
  4. 프로젝트를으로 .pyd하는 대상 확장을 수정 이 예제 : 수입 SYS sys.path.append ("D : \\ TheProjectl \\ \\ 출시 빈") 확장