2012-04-18 49 views
3

我正在研究应用程序的设计。 Core应该用C#编写,但我也想使用一些已经完成的CPython模块(未管理)。C#.NET与托管Python(CPython)的互操作性 - >任何问题?

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

我已经研究过此问题与谷歌就出来了这些解决方案:

  • 使用IronPython的通过DLR +“CPython的扩展名” +也许“铁定的”,并从IronPython的调用CPython的模块,反之亦然 - >这些模块是执行托管还是非托管?如果我想使用CPython的C#类和方法,是否有任何问题?
  • 使用“Python for .NET” - >与上面相同的问题。

您认为哪种方式更好?或者你有另一种解决方案?

而最后但也许是最重要的问题,我理解上面提到的问题吗?还是我搞砸了?

非常感谢提前!

+0

从什么意义上讲,你的模块CPython(而不仅仅是普通的Python)?我问,因为没有太多依赖于实现的功能,尽管肯定有一些功能。仅使用IronPython就可以简单得多,IronPython运行于.NET上,并且可以使用DLR与C#高效交互。 – katrielalex 2012-04-18 12:50:20

+0

谢谢你的回复katrielalex,我不想重写CPython模块,因为它们很多。我也认为IronPython会更好,但是绝对的所有模块都是用CPython编写的。还有一个问题:我根本不熟悉Python,但是如果CPython基于C,在编译本地DLL之后是模块,并且我可以像C DLL那样将它们作为DLL(通过dllimport?)处理。 – Tintenfiisch 2012-04-18 12:59:36

+0

不,你不明白。 CPython是Python语言的一个_implementation_,它正好用C语言编写(就像C#编译器是用C++编写的那样)。尽管可以编写依赖于具体实现的Python代码,但通常任何Python都可以工作任何地方。 – katrielalex 2012-04-18 13:20:18

回答

2

我想你误解了Python。这是一种解释的语言。您只需提供文本源文件,解释程序将执行它们。

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

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

现在,大多数Python没有使用任何特定于实现的功能,因此使用它来运行它并不重要。不过,有些Python确实如此。

嗯,它被编译成.pyc文件......但是“编译”并不是一个真正定义明确的术语。


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

+0

感谢您的信息。是的,你是对的,CPython是解释。但是,您是否具有IronPython的CPython扩展的经验---> http://www.voidspace.org.uk/ironpython/cpython_extensions.shtml? – Tintenfiisch 2012-04-19 07:00:45

+1

@ user1341210:我不知道。但是你仍然没有回答我的问题:你确定你需要这个模块吗?它用于在IronPython中运行_CPython_扩展,并且你还没有说过你的模块是以什么方式专用于Python的C实现。 – katrielalex 2012-04-19 07:22:05

+0

对不起,但我还不能回答问题,因为我还没有收到模块。我认为我的第一点是要分析这些模块,当我收到它们时,以什么方式实现它们。但是,谢谢你的努力! – Tintenfiisch 2012-04-19 08:03:06

1

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