문제

나는 그것을 지원하는 여러 개의 서브 라이브러리가있는 상당히 큰 C ++ 라이브러리를 가지고 있으며, 모든 것을 파이썬 확장으로 바꿔야합니다. Distutils가 크로스 플랫폼이어야하기 때문에 Distutils를 사용하고 있지만 더 나은 도구가 있으면 제안에 열려 있습니다.

Distutils가 먼저 서브 라이브러리를 컴파일하고 기본 라이브러리에서 확장을 생성 할 때 연결하는 방법이 있습니까?

도움이 되었습니까?

해결책

나는 우리 제품의 거대한 C ++ 라이브러리로 이것을합니다. 바인딩 작성 작업을 자동화하는 데 도움이되는 몇 가지 도구가 있습니다. 가장 인기있는 것은 통음, 한동안 이래로 많은 프로젝트에 사용되며 일반적으로 매우 잘 작동합니다.

SWIG에 대한 가장 큰 것은 (내 의견으로는) SWIG 자체의 C ++ 코드베이스는 실제로 그것을 가볍게두기 위해 다소 cruffy라는 것입니다. 그것은 STL 전에 작성되었으며 지금은 오래되고 삐걱 거리는 반 다이나믹 유형 시스템을 가지고 있습니다. 당신이 갇히고 핵심을 수정해야한다면 이것은 중요하지 않습니다 (한 번은 Doxygen-> docstring conversion을 추가하려고 시도했습니다). 사람들은 또한 SWIG 생성 코드가 그다지 효율적이지 않다고 말하지만, 나에게는 SWIG가 자신을 걱정하기에 병목 현상이 충분하다고 생각하지 않았습니다.

SWIG가 보트를 떠 다니지 않으면 사용할 수있는 다른 도구가 있습니다. boost.python C ++ 코드에서 이미 Boost 라이브러리를 사용하는 경우에도 인기가 있으며 좋은 옵션이 될 수 있습니다. 단점은 Compile Time이 거의 모든 C ++ 템플릿 기반이므로 컴파일 시간이 무겁다는 것입니다.

이 두 도구는 노출 될 내용과 어떻게 수행 될 것인지 정의하기 위해 일부 작업을 수행해야합니다. SWIG의 경우 C ++ 헤더와 같은 인터페이스 파일을 제공하고 SWIG가 복잡한 유형을 번역하는 방법을 알려주는 추가 지침을 제공합니다. 이러한 인터페이스를 작성하면 지루할 수 있으므로 같은 것을보고 싶을 수도 있습니다. pygccxml 당신을 위해 그들을 자동 생성하는 데 도움이됩니다.

그 패키지의 저자는 실제로 당신이 원하는 또 다른 확장을 썼습니다. py ++. 이 패키지는 두 가지 작업을 수행합니다. 파이썬 바인딩을 생성하기 위해 부스트.Python에 공급할 수있는 자율적 결합 정의가 가능합니다. 기본적으로 대부분의 사람들에게 전체 솔루션입니다. 특히 특별하거나 어려운 요구 사항이 없다면 거기서 시작하고 싶을 수도 있습니다.

참조로 유용 할 수있는 다른 질문 :

당신은 또한 찾을 수 있습니다 이 비교 파이썬 편리한 바인딩 생성 도구. Alex는 의견에서 지적했듯이, 지금은 오래되었지만 적어도 당신에게 풍경에 대한 아이디어를 제공합니다 ...

빌드를 구동하는 방법의 관점에서, 당신은 distutils : python을 고수하고 싶다면 나는 강력히 추천 할 것입니다. waf 프레임 워크로서 (다른 사람들은 당신에게 말할 것입니다 스콘 갈 길이지만 지옥처럼 느리다고 믿습니다. 나는 이미 거기에 있었고 이미 돌아 왔습니다!) ... 약간의 학습이 필요하지만, 당신이 머리를 돌리면 매우 강력합니다. 그리고 그것은 순수한 파이썬이기 때문에 빌드 프로세스의 일부로 가지고있는 다른 Python 코드와 완벽하게 통합됩니다 (예 : 결국 PY ++를 사용) ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top