我正在从Ruby调用Python代码。有几个现有的工具可以做到这一点,并且在这个网站上有几个建议http://rubypython.rubyforge.org/的问题,它通过在Python中嵌入Python解释器来工作。我正在研究一个使用Python特有的库的应用程序(即图形工具,我有使用RGL的理由),但最终的项目在Rails中,因此使用Ruby代码执行控制工作将是理想的。我希望它快速,所以我使用PyPy。有没有办法让PyPy解释器嵌入到Ruby代码中,或者让Python解释器在rubypython
中运行PyPy?从Ruby调用Python - PyPy兼容性
回答
不,不是没有很多工作。
首先,RubyPython并没有真正包含嵌入式Python解释器;它只是在运行时包装解释器。正如the docs所示,你可以用任何你想要的Python,例如:
>> RubyPython.start(:python_exe => "python2.6")
所以,当你尝试会发生什么运行呢?
>> RubyPython.start(:python_exe => "/usr/local/bin/pypy")
RubyPython::InvalidInterpreter: An invalid interpreter was specified.
from /Library/Ruby/Gems/1.8/gems/rubypython-0.6.3/lib/rubypython.rb:67:in `start'
from /Library/Ruby/Gems/1.8/gems/rubypython-0.6.3/lib/rubypython/python.rb:10:in `synchronize'
from /Library/Ruby/Gems/1.8/gems/rubypython-0.6.3/lib/rubypython/python.rb:10:in `synchronize'
from /Library/Ruby/Gems/1.8/gems/rubypython-0.6.3/lib/rubypython.rb:54:in `start'
from (irb):4
不幸的是,它需要CPython 2.4-2.7。它不与CPython的3.X,PyPy,Jython中,等工作再次,从文档:
RubyPython已经与基于C的Python解释(CPython的),版本2.4通过2.7测试。计划开展工作以启用Python 3支持,但尚未启动。如果您有兴趣帮助我们启用Python 3支持,请告诉我们。
不看代码,我猜rubypython是使用rubyffi要么: *包裹CPython的嵌入API或 *直接通过它的dll /调用CPython的VM内部使/ dylib出口。
如果是前者,该项目可能是可行的,但仍然很多工作。 PyPy不支持CPython的嵌入式API。如果它拥有自己的嵌入式API,则可以重写rubypython的较低级别来包装这些API,并保留较高级别的代码。但是嵌入PyPy仍然在进行中(关于6个月前的状态,请参阅http://mail.python.org/pipermail/pypy-dev/2012-March/009661.html)。因此,您需要首先帮助PyPy嵌入到黄金时间并保持稳定,然后移植到较低级别rubypython使用不同的API。
如果是后者,你几乎是SOL。 PyPy永远不会支持CPython内部,而CPython内部的许多内容实际上是用RPython或Python编写的,然后编译为PyPy,所以原则上甚至不可能。你必须彻底重写所有的rubypython才能找到使其工作的方法,而不是仅仅移植到较低的级别。
一种替代方法是将Ruby移植到RPython并使用PyPy构建一个Ruby解释器和一个Python解释器,它们可以在更高层次上相互交流;那么,为PyRuby和PyPy编写类似rubypython的代码将是微不足道的。但是,这第一步是一个愚蠢的。
- 1. Excel和Ruby的兼容性
- 2. 的Ruby 1.8.7的兼容性
- 3. Python pip兼容性
- 4. 兼容性
- 5. BeautifulSoup的Python 3兼容性
- 6. 从Ruby调用Python
- 7. Ruby宝石版本兼容性问题
- 8. 无效的调用对象,兼容性
- 9. iPhone兼容性
- 10. OpenMDAO + PyOptSparse兼容性
- 11. 从兼容性添加/更改兼容性SimpleMenu/MenuItem片段
- 12. 在pypy中调用python文件
- 13. MSMQ兼容性
- 14. NServiceBus兼容性
- 15. PLSQL_V2_COMPATIBILITY兼容性
- 16. DataContractJsonSerializer兼容性
- 17. OpenSocial Win32兼容性
- 18. Firefox兼容性
- 19. 从Ruby调用python代码
- 20. iOS兼容性
- 21. iPad兼容性
- 22. match_parent兼容性
- 23. 兼容性
- 24. 兼容性()
- 25. silverlight兼容性
- 26. ViewFlipper兼容性
- 27. DX11兼容性
- 28. Java兼容性
- 29. Perl兼容性
- 30. ie8兼容性
您是否考虑过使用构建于JVM上并使用JRuby的Python虚拟机?如果你采用这种方法,在他们之间分享数据将是微不足道的。 –
“why_'就像邪恶的东西 –
@ZephyrPellerin:这并不能真正帮助OP的问题。如果他只想使用任何Python,他已经从rubypython和标准的CPython解释器中获得了。他想要运行PyPy。能够运行Jython并没有让他更接近这一点。 – abarnert