C#.NET与托管Python的互操作性(CPython) - >任何问题?

时间:2012-04-18 12:02:23

标签: c# .net python interop ironpython

我正在设计一个应用程序。 Core应该用C#编写,但我也想使用一些已经完成的CPython模块(非托管)。

所以我对互操作性感兴趣(从C#调用CPython方法和从CPython调用C#)。如果有问题,因为C#在.NET运行时(托管)中运行,而CPython直接在未管理的情况下运行。

我已经与Google调查了这个问题,并提出了这些解决方案:

  • 通过DLR使用IronPython +“CPython扩展”+可能是“IronClad”并从IronPython调用CPython模块,反之亦然 - >这些模块是执行托管还是非托管?如果我想使用CPython中的C#类和方法,有什么问题吗?
  • 使用“Python for .NET” - >与上述问题相同。

您怎么看?哪种方式会更好?或者你有其他解决方案吗?

最后但也许是最重要的问题,我是否理解上述观点,或者我是否搞砸了?

非常感谢提前!!

2 个答案:

答案 0 :(得分:2)

我认为你误解了Python。它是一种解释为 1 的语言。您只需提供文本源文件,解释器就会执行它们。

语言 Python和实现 CPython,IronPython,Jython,PyPy之间存在差异,你有什么。他们每个人都尝试尽可能准确地实现Python语言,同时还添加了特定于实现的功能。这就像C#编译器是用C ++编写的那样。

例如,任何(纯)Python文件都可以由IronPython解释器执行。但是如果你知道你将使用IronPython,你可以使用特殊的IronPython功能,让你进入.NET库。

现在,大多数Python不使用任何特定于实现的功能,因此使用它来运行它并不重要。但是有些Python会这样做。

1 好吧,它被编译成.pyc文件......但是“编译”无论如何都不是一个定义明确的术语。


为什么这对你很重要?好吧,你有一堆Python源代码要与.NET框架一起使用。如果该代码不使用任何特定于CPython的功能 - 例如使用C扩展模块 - 那么您可以在IronPython中运行它。

答案 1 :(得分:1)

通过COM公开您的Python代码并从C#调用它。多次使用这种途径(两种方式)。