我正在從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版本和Rails兼容性
- 8. 寶石兼容性和Ruby版本
- 9. Ruby寶石版本兼容性問題
- 10. 無效的調用對象,兼容性
- 11. iPhone兼容性
- 12. OpenMDAO + PyOptSparse兼容性
- 13. 從兼容性添加/更改兼容性SimpleMenu/MenuItem片段
- 14. 在pypy中調用python文件
- 15. MSMQ兼容性
- 16. NServiceBus兼容性
- 17. PLSQL_V2_COMPATIBILITY兼容性
- 18. DataContractJsonSerializer兼容性
- 19. OpenSocial Win32兼容性
- 20. Firefox兼容性
- 21. 從Ruby調用python代碼
- 22. iOS兼容性
- 23. iPad兼容性
- 24. match_parent兼容性
- 25. 兼容性
- 26. pinTintColor兼容性
- 27. 兼容性()
- 28. silverlight兼容性
- 29. ViewFlipper兼容性
- 30. DX11兼容性
您是否考慮過使用構建於JVM上並使用JRuby的Python虛擬機?如果你採用這種方法,在他們之間分享數據將是微不足道的。 –
「why_'就像邪惡的東西 –
@ZephyrPellerin:這並不能真正幫助OP的問題。如果他只想使用任何Python,他已經從rubypython和標準的CPython解釋器中獲得了。他想要運行PyPy。能夠運行Jython並沒有讓他更接近這一點。 – abarnert