2012-12-20 2 views
3

파이썬과 인터페이스 할 수 있어야하는 C++ 라이브러리가 있습니다. 나는 적응해야 할 선택을 이해하기 위해 this question을 읽었다.C/C++ 라이브러리와 Python의 인터페이스

SWIG와 Cython을보고 SWIG와 함께 가고 싶었습니다. 주로 파이썬 프로그래밍 경험이 거의 없었기 때문입니다. 그러나 Swig을 사용하여 모든 클래스에 대해 인터페이스 (.i 확장자)를 작성해야한다는 것을 알고 있습니다. 자, 내 C++ 프로젝트는 거대하고 wrapper를 제 자리에 잡는 데 많은 시간이 걸릴 것이라고 생각합니다.

지금은 제 신청이 많아서 선택을해야합니다. 인용 된 스레드에서 나는 Boost Python을 보게되었다. 이제는 더 이상 결정할 수없고, 나에게 장단점을 말해 줄 수있는 사람들의 의견을 듣고 싶지 않습니다. 나의 선호는 사용하기 쉽고 얼마나 빨리 할 수 ​​있는지주의하십시오. 나는 이것을 위해 시스템 성능을 손상 시키려고한다. 누군가 SWIG 구현 프로젝트 나 Boost Python 구현 프로젝트 링크를 제공 할 수 있다면 정말 감사 할 것입니다. (예제 튜토리얼 대신 완전한 모듈이 훨씬 더 좋을 것입니다!)

+0

이것은 Boost를 설치하고 모든 것이 작동하는지 확인하는 데 필요한 모든 것이어야합니다. http://www.boost.org/doc/libs/1_39_0/libs/python/doc/building.html – paulsm4

+0

또한이 wiki 페이지는 다음과 같습니다. 튜토리얼 미스를 향상시키는 유용한 팁이 많이 있습니다 http://wiki.python.org/moin/boost.python?action=show&redirect=BoostPython –

답변

4

Boost :: python은 거의 래퍼없는 인터페이스를 제공합니다. C++ 및 Python. 또한 사용자 정의 변환기와 Python 인터페이스를 훨씬 더 멋지게 만드는 다른 멋진 것들을 작성할 수 있습니다. 인터페이스는 순수한 C++이지만 템플릿과 영리한 디자인 패턴을 사용하여 멋지고 선언적으로 보이게합니다. 또한 커넥터 코드가 컴파일러에 의해 직접 검사되는 이점을 얻습니다.

Swig을 사용하면 Swig의 자체 DSL에 인터페이스 선언을 작성합니다. 잠깐 기다리려면 며칠이 걸립니다. 또한 래퍼 레이어를 항상 삽입하므로 약간 느려질 수 있습니다. 그러나, 그것은 여분의 것을 선전 할 필요없이 나중에 많은 것들을 자동으로 변환하는 좋은 기능을 가지고 있습니다. 래퍼가 생성하는 래퍼는 꽤 어렵습니다.

CPython의 네이티브 C 인터페이스로 직접 작업하기 때문에 IMHO boost :: python이 더 나은 선택입니다. JNI가 곰이기 때문에 Swig for Java와 C++ 상호 작용을 사용합니다. Python의 C 인터페이스는 사실 자체적으로 모두 사용할 수 있습니다.

이미 많은 Swig 래퍼가 있다면, 그 모든 작업을 다시해야하기 때문에 필자는 그것을 보관할 것입니다. 그러나 새 프로젝트를 시작하거나 최대 성능이 필요한 경우 boost :: python을 계속 진행하십시오!

+0

감사합니다. ! 그래서 나는 prototype을 실행하기 위해 boost :: python을 깊이 들여다 보았다. 문서에 대한 링크도 가져 주셔서 감사합니다. – rockstar

+0

많은 유형의 자동 변환을 허용하는 pybind11을 시도해보십시오 (그리고 전체 부스트 라이브러리를 사용하지는 않습니다) –