可以在各种Python中使用的Python扩展(jython/IronPython/etc)
在只有cpython的“旧时代”,大多数扩展都是用c编写的(尽可能独立于平台),并编译成pyd(比如PyCrypto)。现在有了Jython、IronPython和PyPy,pyd不能与它们中的任何一个一起工作(铁壳除外)。似乎它们都支持ctypes,最好的方法可能是创建一个独立于平台的dll或共享库,然后使用ctypes与之接口可以在各种Python中使用的Python扩展(jython/IronPython/etc),python,ironpython,jython,Python,Ironpython,Jython,在只有cpython的“旧时代”,大多数扩展都是用c编写的(尽可能独立于平台),并编译成pyd(比如PyCrypto)。现在有了Jython、IronPython和PyPy,pyd不能与它们中的任何一个一起工作(铁壳除外)。似乎它们都支持ctypes,最好的方法可能是创建一个独立于平台的dll或共享库,然后使用ctypes与之接口 但我认为这种方法会比老式的pyd方法慢一点。您还可以为cpython编写pyd,为IronPython编写类似的c#dll,为Jython编写java类或jar(我对
但我认为这种方法会比老式的pyd方法慢一点。您还可以为cpython编写pyd,为IronPython编写类似的c#dll,为Jython编写java类或jar(我对PyPy不太确定。但是,虽然这种方法会吸引平台纯粹主义者,但它非常耗费人力。那么今天最好的方法是什么呢?目前看来,ctypes确实是最好的方法。它在今天起作用,而且非常方便,它将征服(大部分)世界 对于性能关键型API(如numpy),ctypes确实存在问题。最干净的方法可能是移植Cython以生成本机IronPython/Jython/PyPy扩展
我记得PyPy曾计划将ctypes代码编译成高效的包装器,但就我而言,谷歌目前还没有类似的东西…如果你包装现有的本机库,那么ctypes绝对是一个不错的选择
如果您试图加速Python扩展中的热点,那么为每个解释器创建一个自定义扩展(以及一个纯Python回退)很容易处理,因为大部分代码都是可以共享的纯Python代码,但正如您所说,这是不可取的,而且需要大量的人力。在这种情况下,您也可以使用ctypes。谢谢您……这就是我所想的……将您的回答标记为第一个答案。谢谢您……这也是一个很好的答案。