Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在各种Python中使用的Python扩展(jython/IronPython/etc)_Python_Ironpython_Jython - Fatal编程技术网

可以在各种Python中使用的Python扩展(jython/IronPython/etc)

可以在各种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(我对

在只有cpython的“旧时代”,大多数扩展都是用c编写的(尽可能独立于平台),并编译成pyd(比如PyCrypto)。现在有了Jython、IronPython和PyPy,pyd不能与它们中的任何一个一起工作(铁壳除外)。似乎它们都支持ctypes,最好的方法可能是创建一个独立于平台的dll或共享库,然后使用ctypes与之接口


但我认为这种方法会比老式的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。

谢谢您……这就是我所想的……将您的回答标记为第一个答案。谢谢您……这也是一个很好的答案。