可以将PyPy嵌入到.NET应用程序中吗?

17 投票
2 回答
2007 浏览
提问于 2025-04-16 18:06

我想把一个Python解释器嵌入到我的.NET应用程序里。我当然知道IronPython,但我特别感兴趣的是PyPy,因为它支持无栈和微线程。

不过,虽然PyPy可以在CLI上构建,但看起来这只是给你一个独立的Python解释器,就像python.exe那样。我找不到任何文档来说明如何构建一个可以真正嵌入到.NET主机应用程序中的东西。

有没有办法使用(无栈)PyPy从.NET应用程序运行Python脚本,并允许这些脚本与主机应用程序提供的CLR对象进行交互?

2 个回答

3

不,这个是没有的。CPython可以通过一个叫做Python for .NET的工具来访问.NET的库,具体可以去这个网站看看:http://pythonnet.github.io/,这个工具是在github上维护的。不过,除了IronPython之外,实际上没有办法把Python解释器嵌入到.NET应用程序里。这也是它的一个主要卖点。

另外提一下,IronPython在递归时默认的栈大小比CPython小。也就是说,你需要在运行ipy.exe时加上一个“-X:FullFrames”的命令行选项,才能启用类似CPython的栈帧。要知道,这个效果没有PyPy好……但可能会有点帮助哦 :)

5

PyPy的命令行界面(CLI)后端还没有C语言的后端成熟,也不太能和.NET的库很好地结合。虽然普通的PyPy编译成C后可以用于生产环境,但我不认为.NET版本已经准备好用于生产。它还缺少即时编译(JIT),虽然在这方面已经做了一些工作,还有微线程。如果没有人来解决这些问题,目前看起来IronPython是唯一一个可行的选择。

撰写回答