2009-07-02 4 views
5

파이어 폭스를 C/C++로 확장하기 위해 도구 나 소프트웨어에 관한 조언을 해주실 분? 감사.C/C++로 파이썬 확장하기

+6

http://docs.python.org/c-api/를 읽었을 때 어떤 문제가 있었습니까? –

+0

Cython은 이것을하기위한 좋은 옵션입니다! 실제로 Cython 소스 파일을 작성하는 것부터 빌드하는 것까지 모든 세부 사항을 담고있는 작은 게시물을 작성하여 setup.py - 기본으로 Cython으로 C/C++ 라이브러리를 래핑하는 데 필요한 모든 것을 작성했습니다. http://martinsosic.com/ development/2016/02/08/wrapping-c-library-as-python-module.html – Martinsos

답변

8

우리는 SWIG를 사용하여 C/C++ 라이브러리를 파이썬에서 사용하기 위해 포장했습니다. 그것은 아주 잘 작동합니다.

http://www.swig.org/

13

파이썬 웹 사이트 자체는 물론 API documentation 아니라, 좋은 set of examples 있습니다. 그것은 문자 그대로 C 확장을 작성해야 할 때 사용했습니다. http://www.python.org/doc/ext/

그리고 물론 또한 C/C++ 컴파일러 :

+0

+1 : 이미 문서화되어 있습니다. –

+0

오, 나는 당신이 비유적인 것을 의미한다고 생각했다. 해명 덕분에 – andrewrk

+0

libary가 특별한 QT 나 WxWidgets와 같은 것이 아니라면 손으로 작성한 코드가 가장 좋다. – Lothar

2

예, 당신이 필요합니다.

당신이하려는 일, 그리고 어떤 종류의 확장 프로그램을 작성했는지 사람들이 당신에게 더 많은 정보를 줄 수있을 것이라 확신합니다.

라이브러리를 포장하는 것과 같은 것들이 있습니다. 속도 향상 만 원한다면 C가 종종 대답은 아니지만 항상 그렇습니다.

13

C++ 용으로 Boost.Python에 대한 의무적 인 참조를 추가 할 것입니다.

+0

며칠 전 boost.python을 사용하기 시작했으며 이미 실행 중입니다. –

1

this example이 도움이 될 수 있습니다. 나는 그것이 충분히 간단하다고 생각한다.

3

많은 해결책이있다. 일반적으로 C 확장을 작성하는 것은 지겨운 일이므로 가능하면 피해야합니다. 종종 타사 라이브러리를 사용해야합니다. 이 경우 성공한 솔루션은 오늘 cython입니다.

Cython은 "파이썬처럼 보입니다"는 언어이지만 선택적인 타이핑을 사용하면 훨씬 빠르게 만들 수 있습니다. 내부에서 직접 C 함수를 호출 할 수 있으며 대부분의 참조 계산 (C 확장의 어려운 문제)은 자동으로 수행됩니다. 내 경험상 boost.python, swig 또는 ctypes보다 훨씬 낫다.

  • boost.python은 C++ 확장자를 IMHO로만 감싸 준다. 나는 너무 복잡하고 뭔가 잘못되었을 때 디버깅하기가 어렵다는 것을 알았다.
  • swig에는 상당한 오버 헤드가 있으며 좋은 코드로 이어지지 않습니다. 이 기능의 몇 작품을 좋아하지만, 비 사소한 확장 자주적인 typemap를 사용하고, 구문, 당신은 포장 파이썬 객체 (목록, 딕셔너리, 등 ...)를 사용할 수 있습니다 사이 썬으로 빠르게

추한 당신의 C 라이브러리. 물론 속도면에서 확장 기능을 직접 작성해야하는 경우에도 매우 유용합니다. 과학적인 파이썬 커뮤니티에서는 속도가 필요할 때 cython이 선택 도구가되었다고 생각합니다.

+0

OP가 처음에 그것을하고 싶어하는 이유를 모른 채 "가능하다면 피해야합니다"라고 말하면 잘못된 것입니다. 파이썬이 C 확장을 지원하는 데는 이유가 있습니다. 때로는 C 확장이 최상의 솔루션이기 때가 있습니다.이 경우 피할 수 없습니다. 또한 ctypes는 컨텍스트에 따라 cython에 비해 많은 이점을 가지고 있으며, 그렇지 않은 경우 ctypes는 더 나은 것을 말하기에는 잘못되었습니다 (http://stackoverflow.com/questions/1942298/wrapping-ac-library-in-python-c-cython- 또는 -ctypes) – mwag

6

아직 아무도 C++ 코드, SIP을 감싸는 데 가장 좋아하는 솔루션 중 하나를 지적하지 않았습니다. (나는 SWIG와는 달리 C를 감싸는 데 효과적이며 Boost와는 다르다고 생각합니다. Riverbank Software가 멋진 Qt C++ 크로스 플랫폼 프레임 워크에 대한 Python 인터페이스 인 PyQt를 개발하기 위해 개발 한 도구입니다. C++ 코드가 모든 Qt 기능을 사용한다면 당연한 선택입니다. Boost Python이 C++ 코드 부스트를 사용합니다.

SWIG는 우리가 직장에서 사용하는 것입니다 (10 년 전에 만들어 졌을 때 합리적인 결정이었습니다 .--), Java, Perl, Tcl 등에서 사용하기 위해 C 또는 C++ 코드를 래핑 할 수 있다는 이론적 이점이 있습니다. -하지만 파이썬 만 신경 쓰면 눈에 띄는 것을보기가 어렵습니다.

기존 DLL을 래핑하는 중이라면 Cython 외에도 다른 답변이 지적되어 있습니다. (그리고 저는 보증합니다. 그러나 매우 빠르게 변화하고 있습니다. , 표준 함수 모듈을 고려하십시오 ctypes - 나는 매우 광범위한 작업 ("oops"오류는 C 또는 C++ 컴파일러가 ctypes로 런타임 충돌을 일으킬 수 있음을 나타냅니다)을 사용하지 않지만 작은 작업의 경우에는 훌륭합니다 표준 파이썬 배포판이 있기 때문에 매우 편리합니다! -).

좋은 오래된 C API는 아직 죽지 않았습니다. 오늘 좋은 오픈 소스 프로젝트 인 gmpy을 실행중인 대부분의 사람 인 Case와 함께 오늘 만났습니다. 함께 우리는 C 적어도 gmpy의 다음 릴리스 용 API - 안정화 될 때 Cython으로 전환하는 것을 고려할 것입니다. 그러나 우리는 스위치가 여전히 조금 조숙 한 것으로 동의했습니다. (gmpy의 주요 포인트는 우리가 가능한 한 빨리 블리딩 할 수 있기 때문에 우리는 다른 대안을 생각조차하지 못했습니다!).

+0

PySide에 해당하는 Siboken에 대해 어떻게 생각하십니까? http://www.pyside.org/docs/shiboken/ –

+0

@Craig, 아직 시도하지는 않았지만, 다음에 Qt 작업을 할 때 (필자에게 PySide를 시도 할 현실적인 기회를 제공) 계획을 세울 계획입니다. –

+0

오타를 유감스럽게 생각하며 "시보 켄"을 의미했습니다. PySide는 유망한 것으로 들립니다. 나는 그들이 바퀴를 재발 명해야하는 것을 유감스럽게 생각한다. –

3

나는 과거에 pycxx을 사용했으며이 라이브러리를 정말 즐겁게 사용했습니다.

제 의견으로는 SWIG보다 사용하기가 더 쉽습니다. boost.python과 비교할 수는 없습니다. pycxx는 boost.python보다 가볍지 만 잘못 생각할 수도 있습니다.

pycxx의 핵심은 python c api의 C++ 래퍼라는 것입니다. 그것은 객체 지향적이며 모든 어려운 메커니즘을 숨 깁니다. 파이썬 프로그래머에게는 매우 직관적입니다. 사용하기가 쉽고 시작하기에 좋은 예제가 있습니다.

나는 파이썬 확장을 C++로 만드는 일류 시민으로 pycxx를 추천합니다.