是否可以将 PyPy 嵌入到 .NET 应用程序中?
Posted
技术标签:
【中文标题】是否可以将 PyPy 嵌入到 .NET 应用程序中?【英文标题】:Is it possible to embed PyPy into a .NET application? 【发布时间】:2011-08-30 09:26:03 【问题描述】:我想将 Python 解释器嵌入到我的 .NET 应用程序中。我当然知道 IronPython,但我对 PyPy 特别感兴趣,因为它的无堆栈支持和微线程。
然而,虽然 PyPy 可以针对 CLI 构建,但看起来它只是为您提供了一个独立的 Python 解释器,例如 python.exe。我找不到任何文档来构建可以实际嵌入到 .NET 主机应用程序中的东西。
有没有办法使用(无堆栈)PyPy 从 .NET 应用程序运行 Python 脚本,并允许这些脚本与宿主应用程序提供的 CLR 对象进行交互?
【问题讨论】:
可能有一种方法可以将pypy构建为dll,因此可以在c#内部使用 【参考方案1】:PyPy 的 CLI 后端不如 C 后端成熟,也不能与 .NET 库集成。虽然编译为 C 的普通 PyPy 已准备好生产,但我不会称 .NET 版本已准备好生产。它还缺少 JIT(尽管在这方面已经完成了一些工作)和微线程。除非有人介入,否则 IronPython 似乎是目前唯一可行的选择。
【讨论】:
【参考方案2】:不,没有。 CPython 能够使用在 github 上维护的 Python for .NET(参见 http://pythonnet.github.io/)访问 .NET 库,但除了 IronPython 之外,从来没有一种方法可以将 Python 解释器实际嵌入到 .NET 应用程序中。这是它的主要卖点之一。
在相关说明中,IronPython(默认情况下)在递归方面比 CPython 具有更小的堆栈大小。也就是说,您必须将“-X:FullFrames”命令行选项传递给 ipy.exe 以启用 CPython 式堆栈帧。知道这不如 PyPy...但它可能会有所帮助:)
【讨论】:
Python Dot Net 并没有完全消亡。最新文件位于:sourceforge.net/projects/pythonnet/files 和颠覆统计:sourceforge.net/project/stats/… PythonNET 现在在 github 上,还没有死! 我们正在使用 cpyext 在 pythonnet 中支持 PyPy:***.com/q/42152122/2230844以上是关于是否可以将 PyPy 嵌入到 .NET 应用程序中?的主要内容,如果未能解决你的问题,请参考以下文章
使用带有嵌入式 PyPy 的外部“Python”样式 cffi 回调