首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python和Ruby组合扩展模块

Python和Ruby组合扩展模块
EN

Stack Overflow用户
提问于 2009-02-04 13:42:05
回答 2查看 724关注 0票数 8

我有一个Python的C扩展模块,我想把它提供给Rubyists。

源代码中有许多C模块,其中只有一个依赖于Python。其余的只依赖于彼此和标准库。我可以用通常的方式用python setup.py build构建它。

我一直在尝试使用newgem添加对Ruby的支持,我可以用rake gem构建一个版本的扩展。然而,组合后的源代码具有丑陋的目录布局(混合了Gem样式和Setuptools样式的结构),并且构建过程非常繁琐。

我不能简单地将所有源代码放在同一个目录中,因为mkmf会自动选择依赖于Python的模块并尝试构建它,用户不应该为了编译不会使用的模块而安装Python。我目前的技巧是让extconf.rb将独立于Python的源文件复制到与依赖于Ruby的扩展模块相同的目录中。

有没有一种更明智的方法来使代码对两种语言都可用?我应该在一个单独的Gem中复制独立于Python的代码吗?我是否应该将独立的代码作为使用autotools构建的单独的库发布?有没有一个版本的mkmf可以跳过不需要的模块?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-04 15:35:57

解决这个问题的一个方法是创建三个不同的项目:

  • 库本身,独立于python和ruby
  • Python bindings
  • Ruby bindings

这可能是最干净的解决方案,尽管在发布时需要做更多的工作,但它的优点是您可以发布Ruby绑定的新版本,而不必发布新的库/python绑定版本。

票数 5
EN

Stack Overflow用户

发布于 2009-02-05 03:54:55

作为对Johan所说的补充,我在Python中使用了一些c/c++支持库,这要归功于swig。您可以用c/c++编写代码,然后为您想要支持的每种语言创建一个中间模板。对于Python来说,这是相当轻松的,但是对于Ruby,必须做一些考虑……也就是说,我不认为pthread支持对ruby是满意的,反之亦然。

http://www.swig.org/它有一个比较陡峭的学习曲线,所以最好找一个示例项目来演示如何使用目标语言的包装器。

这绝对是一个有用的工具,因为它使您的代码更加整洁,同时仍然提供到多种语言(PHP、Python、Ruby和我相信c#)的健壮绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/511412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档