用 Python.Net 替换 IronPython?

And*_*ens 5 ironpython python.net

多年来,我们一直将 IronPython 用作一些 .Net 桌面应用程序中的脚本工具。客户一直在询问我们何时会支持 Python 3,但看起来 IronPython3 仍有很长的路要走(https://github.com/IronLanguages/ironpython3)。我刚刚找到了一个名为 Python.Net 的库,并想知道它与 IronPython 有多相似,我们是否可以转移到它?

大多数 Python.Net 示例展示了如何在 Python 代码中使用 .Net 类型,我找不到任何关于如何在 C# 中实际运行 Python 代码的好示例。页面末尾有一个标题为“嵌入 Python”的部分 ( http://pythonnet.github.io/ ),但没有详细介绍。

我很想知道如何从文件或字符串运行脚本,脚本是否可以“编译”(如 IronPython),大概“变量”可以像 IronPython 作用域一样来回传递?是否有任何限制或已知问题?Python.Net 是否允许运行引用库(例如 numpy)的脚本?(我们无法在 IronPython 上使用它,我认为这是因为它包含编译的 (.pyc) 代码,而 IP 不支持该代码)。

有没有人对两者都有经验,并且能够提供一些关于它们如何比较的见解?

LOS*_*OST 6

简短的总结:最初,Python.NET 被设计为 IronPython 的直接替代品,因此您想要的大部分功能都是可以实现的,但需要注意的是:您还需要一个常规的 Python 解释器。

现在了解更多详细信息:

  1. 运行 Python 脚本-PythonEngine类具有ExecEval函数。
  2. “已编译” -Python.NET 没有编译脚本的选项。您必须将它们作为字符串和/或文件传递给PythonEngine(这只是 Python 解释器的一种表示)。
  3. 与 IronPython 作用域类似- 有一个PyScope类,可让您控制一组 Python 变量。
  4. 限制或已知问题- 有很多。您无法访问所有 CPython API,并且某些 .NET API 可能无法从 Python 调用,但在大多数情况下它都可以工作。
  5. 允许 .. numpy - Python.NET 可以调用任何 Python 库。事实上,我广泛使用它来包装C# 的 TensorFlow(其中还包括 NumPy)。

Python.NET 与 IronPython 相比存在的问题:

  • 需要单独安装和管理Python解释器
  • 函数重载并不那么好