我正在设计应用程序.核心应该用C#编写,但我也想使用一些已经完成的CPython模块(非托管).
因此,我对互操作性感兴趣(从C#调用CPython方法,从CPython调用C#).如果有问题,因为C#在.NET运行时(托管)内运行,而CPython直接在非托管范围内运行.
我已经通过Google调查了此问题,并提出了以下解决方案:
>通过DLR使用IronPython,“ CPython扩展名”或“ IronClad”并从IronPython调用CPython模块,反之亦然->这些模块是托管的还是非托管的?如果我想使用CPython中的C#类和方法,是否有任何问题?
>使用“ Python for .NET”->与上述相同的问题.
您认为哪种方法更好?还是您有其他解决方案?
最后一个但也许是最重要的问题,我是否正确理解了上述要点,还是弄糟了?
提前谢谢了 !!
解决方法:
我认为您误解了Python.这是一种解释型语言.您只需提供文本源文件,解释器将执行它们.
Python语言和CPython,IronPython,Jython,PyPy实现之间是有区别的.他们每个人都试图尽可能准确地实现Python语言,同时还添加了特定于实现的功能.就像C#编译器是用C编写的.
例如,任何(纯)Python文件都可以由IronPython解释器执行.但是,如果您知道将要使用IronPython,则可以使用特殊的IronPython功能,这些功能使您可以进入.NET库.
现在,大多数Python不使用任何特定于实现的功能,因此您使用什么来运行它都没有关系.不过,有些Python可以.
1好吧,它已经被编译成.pyc文件了……但是“编译”实际上并不是一个明确定义的术语.
为什么这对您很重要?好了,您有一堆想要与.NET框架一起使用的Python源代码.如果该代码不使用任何特定于CPython的功能(例如使用C扩展模块),则可以在IronPython中运行它.