我正在设计一个应用程序。核心应该用C编写,但我也希望使用一些已经完成的CPython模块(un managed)。
所以我对互操作性很感兴趣(从C调用CPython方法,从CPython调用C)。如果有问题,因为C#在.NET运行时(托管)中运行,而CPython直接不托管。
我已经和谷歌调查过这个问题,并提出了以下解决方案:
通过DLR+“CPython extension”+或者“IronClad”使用IronPython,并从IronPython调用CPython模块,反之亦然->这些模块是托管的还是非托管的?如果我想使用CPython中的C类和方法,有什么问题吗?
使用“Python for.NET”->与上面的问题相同。
你觉得怎样,哪种方式更好?或者你还有别的办法吗?
最后一个可能是最重要的问题,我是否正确理解了上面提到的几点,或者我搞砸了?
多谢提前!!
最佳答案
我想你误解了Python。这是一种翻译语言。您只需提供文本源文件,解释器就会执行它们。
Python语言和CPython、IronPython、Jython、pypypy的实现之间有区别。它们都试图尽可能精确地实现Python语言,同时还添加了特定于实现的功能。这就像C语言编译器是如何用C++编写的。
例如,任何(纯)Python文件都可以由IronPython解释器执行。但是如果您知道要使用IronPython,那么可以使用特殊的IronPython特性,这些特性可以让您进入.NET库。
现在,大多数Python都不使用任何特定于实现的功能,所以使用什么来运行它并不重要。不过,有些蟒蛇会。
它被编译成.pyc文件。。。但无论如何,“编译”并不是一个定义良好的术语。
为什么这对你很重要?好吧,您有一堆Python源代码要与.NET framework一起使用。如果这段代码没有使用任何特定于CPython的特性(比如使用C扩展模块),那么您可以在IronPython中运行它。
关于c# - C#.NET与托管Python(CPython)的互操作性->有问题吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10208960/