2009-02-04 8 views
7

나는 파이썬 용 C 확장 모듈을 가지고 있으며이를 루비스트에게 제공하고자한다.파이썬과 루비 확장 모듈을 결합한

소스는 파이썬 의존적 인 하나의 C 모듈을 가지고 있습니다. 나머지는 서로와 표준 라이브러리에만 의존합니다. 평소와 같이 python setup.py build으로 구축 할 수 있습니다.

나는 newgem을 사용하여 Ruby 지원을 추가하는 실험을했으며 rake gem으로 확장 버전을 빌드 할 수 있습니다. 그러나 결합 된 소스는 못생긴 디렉토리 레이아웃 (Gem 스타일과 Setuptools 스타일 구조 혼합)을 가지고 있으며 빌드 프로세스는 골치 거리입니다.

mkmf이 자동으로 파이썬 종속 모듈을 선택하여 빌드하려고하기 때문에 사용자가 파이썬을 설치하지 않아도 될 모듈을 컴파일하지 않아도되기 때문에 모든 소스를 동일한 디렉토리에 보관할 수는 없습니다 사용하십시오. 내 현재의 해킹은 extconf.rb에 대해 Python 독립적 인 소스 파일을 Ruby 종속 확장 모듈과 동일한 디렉토리에 복사하는 것이다.

코드를 두 언어 모두에서 사용할 수 있도록하는 건전한 방법이 있습니까? 파이썬 독립적 인 코드를 별도의 Gem에 복사해야합니까? 독립적 인 코드를 autotools로 빌드 된 별도의 lib로 릴리스해야합니까? 원치 않는 모듈을 건너 뛸 수있는 mkmf 버전이 있습니까? 파이썬 & 루비

  • 파이썬 바인딩에 독립적 인 아마의
  • 루비 바인딩
    • 라이브러리 자체 : 그것을 해결하기

    답변

    5

    한 가지 방법은 세 가지 프로젝트를 만드는 것입니다 릴리스를 수행 할 때 좀 더 많은 작업이 필요하지만 가장 깨끗한 솔루션이지만, Ruby 바인딩의 새 버전을 릴리스 할 수 있다는 장점이 있습니다. 새 라이브러리/파이썬 바인딩 버전을 제공해야합니다.

    0

    요한이 말한 것을 보완하기 위해 필자는 파이썬에서 몇 개의 c/C++ 지원 라이브러리를 사용했습니다. c/C++로 코드를 작성한 다음 지원하려는 각 언어에 대한 중간 템플리트를 작성하십시오. Ruby는 파이썬에 비해 다소 고통 스럽지만 Ruby에 대해서는 몇 가지 고려 사항이 있어야합니다. 즉, pthread 지원이 루비에 만족스럽지 않거나 그 반대의 경우도 아닙니다.

    http://www.swig.org/ 다소 가파른 학습 곡선이 있으므로 대상 언어에 대한 래퍼 사용 방법을 보여주는 예제 프로젝트를 찾아 보는 것이 가장 좋습니다.

    이것은 여러 언어 (PHP, Python, Ruby 및 C#을 사용한다고 믿는다.)의 견고한 바인딩을 제공하면서 코드를 훨씬 깔끔하게 만들어주는 유용한 도구이다.