2016-09-16 6 views
1

그래서 저는 C/C++ 프로그램 인터페이스에 파이썬 코드를 작성해야하는 프로젝트를 수행하고 있습니다.하지만 어떤 도구를 사용해야하는지 결정하지 않았습니다. 직관적으로 pybind11Boost.Python 중에서 선택하고 싶습니다. 프로그래머 : 두 사람 사이의 프로 및 콘은 무엇입니까? 어느 것을 사용할 지 어떻게 결정하겠습니까?다른 파이썬 도구를 사용하는 C/C++

+2

Cython에 대한 언급이 없습니까? – AndyG

+0

두 번째 Cython 포함 - pybind11은 기본적으로 Boost.Python 핵심 관용구를 부스트없이 구현 한 것입니다. Cython은 완전히 다른 인터페이스 패러다임 (아니, 다른 언어입니다!)이기 때문에 비교의 더 나은 점입니다 – fish2000

+0

업데이트 - pybind11 및 Boost.Python 외에도 Cython을 해결하는 답변을 작성했습니다 – fish2000

답변

1

Boost.Python 염두에 두 가지 기본 목표로, 지금까지의 내가 확인할 수있는 설계되었습니다

  1. 제공 프로 파이썬 C++ 개발자 C에서 "파이썬"API ++ 확장 개발 - 같은
  2. 것을 ...이 API의 아키텍트는 타겟 개발자의 사용자 기반을 underlying Python C-API의 구현 세부 사항에서 격리 할 수 ​​있도록 가능한 한 인간적으로 가능한 최대한 열심히 시도합니다. 특히 사용자가 PyObject* 값과 참조 횟수를 조작해야하는 것을 원하지 않습니다.

예상 할 수 있듯이 , Boost.Python는 이러한 목표를 달성하기 위해, 수많은 낮은 수준의 부스트 라이브러리에서, 부스트 프리미티브를 사용 - 어떤이 아주 잘가 수행합니다

  1. 프로젝트가 이미 부스트를 사용으로 구입 한 경우,
  2. 상상할 수있는 Python-to-C++ 유스 케이스의 98 %를 좋아합니다.

개인적으로 부스트를 사용하는 것을 싫어합니다. 만약 당신이 비슷한 성향을 가지고 있고 프로젝트의 성격에 대한 행정적인 결정을 내릴 수 있다면 Boost의 가장 중요한 대다수라고 생각되는 것을 얻을 수 있습니다. 없이 부스트 의존성 오버 헤드를 사용하면 pybind11 - C++ 11 기능을 활용하는 새로운 프로젝트로 의사 Python API에 필요한 저수준 도구를 다시 구현합니다.

TL; DR :pybind11 심각한 부스트 알레르기 중등도 개발자를위한 Boost.Python입니다. 이 두 가지 도구를 모두 사용하면 하나 이상의 Python 모듈을 통해 함수, 유형, 템플릿 등 기존 API를 유사 Python 구조로 제공하는 C++ 계층을 작성할 수 있습니다.

대조적으로 : Cython은 전혀 다른 접근 방식을 사용합니다. Cython은 파이썬 언어의 수퍼 세트를 제공합니다.이 언어는 C 및 C++ 프리미티브를 관련 파이썬 데이터 구조와 함께 직접 조작 할 수있는 키워드를 추가로 제공합니다.

  1. 신중하게 해석 된 파이썬 도메인에서 그리고 네이티브 컴파일에 "핫"관용구를 이동하여 파이썬 코드를 최적화 :이 (종종 다소 직교)를 사용-의 경우 완전히 다른 접근 방식이며, 두 빌려 준다 Cython 도메인;
  2. 기존 C 또는 C++ 라이브러리에 Python 인터페이스를 제공합니다.

... 이들은 다른 작업이지만 종종 파이썬 혼자서 할 수있는 것보다 빠른 것을 실행하기 위해 확장 기능을 작성하므로 이유 # 1에 대한 Cython을 사용하면 # 2에 대한 필요성을 없앨 수 있습니다 사용할 도구).

나는 Cython을 좋아하지만, 인터페이스 (use # 2)에 대한 사용법은 C++ 꽤 추운 것을 알면 향상된다.Cython을 선택하고 전문 C-hacker 또는 C++ afficionato가 아닌 병목 현상이있는 Python 코드 (# 1 사용)를 최적화하는 데 매우 쉽습니다. 그러나이 IMO는 Cythonic 인터페이스로 확장되지 않습니다.

이것은 물론 주관적인 평가입니다. 질문자는 이러한 프레임 워크로 몇 가지 샘플 프로그램을 수행하고 자신의 결론을 이끌어 낼 수 있습니다.

+0

감사합니다! 이것은 매우 포괄적입니다! – Javaian

+0

@Javaian - 안녕하세요. Cython이 당신을 위해 작동해야한다면 질문을 업데이트하십시오. – fish2000