C#.NET与托管Python(CPython)的互操作性-->;有什么问题吗?
我正在设计一个应用程序。核心应该用C#编写,但我还想使用一些已经完成的CPython模块(未管理) 所以我对互操作性感兴趣(从C#调用CPython方法,从CPython调用C)。如果有问题,因为C#在.NET运行时内运行(托管),而CPython直接未托管 我已经向谷歌调查了这个问题,并得出了以下解决方案:C#.NET与托管Python(CPython)的互操作性-->;有什么问题吗?,c#,.net,python,interop,ironpython,C#,.net,Python,Interop,Ironpython,我正在设计一个应用程序。核心应该用C#编写,但我还想使用一些已经完成的CPython模块(未管理) 所以我对互操作性感兴趣(从C#调用CPython方法,从CPython调用C)。如果有问题,因为C#在.NET运行时内运行(托管),而CPython直接未托管 我已经向谷歌调查了这个问题,并得出了以下解决方案: 通过DLR+“CPython扩展”+可能是“Ironcold”使用IronPython,并从IronPython调用CPython模块,反之亦然->这些模块是托管还是非托管执行的?如果我
- 通过DLR+“CPython扩展”+可能是“Ironcold”使用IronPython,并从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文件。。。但无论如何,“编译”并不是一个定义良好的术语
为什么这对你很重要?好吧,您有一堆Python源代码,希望与.NET framework一起使用。如果该代码没有使用任何特定于CPython的特性(例如使用C扩展模块),那么您可以在IronPython中运行它。通过COM公开Python代码,并从C#调用它。多次使用这种方法(两种方式)。您的模块是什么意义上的
CPython
(与普通Python相反)?我这样问是因为没有太多依赖于实现的特性,尽管肯定有一些。使用IronPython会简单得多,它运行在.NET上,使用DLR与C#进行愉快的交互。谢谢你的回复Katrielex,我不想重写CPython模块,因为它们太多了。我还认为IronPython会更好,但所有模块都是用CPython编写的。还有一个问题:我对Python一点也不熟悉,但如果CPython是基于C的,那么编译后的模块只是本地DLL吗?我能从C#像对待DLL一样对待它们吗(通过dllimport?)。不,你不明白。Cpython是Python语言的一种实现,恰好是用C编写的(就像,C语言编译器是用C++编写的)。尽管可以根据具体的实现编写Python代码,但是任何Python一般都在任何地方工作。(嗯,不是真的。)它被解释了:有一个叫做解释器的程序,它只需要获取一个源文件并执行它。谢谢你提供的信息。是的,你是对的,CPython被解释了。但是你有IronPython的CPython扩展-->的经验吗?@user1341210:我没有。但你仍然没有回答我的问题:你确定你需要那个模块吗?它是用于在IronPython中运行CPython扩展的,您还没有说明您的模块以何种方式特定于Python的C实现。很抱歉,我还不能回答这个问题,因为我还没有收到模块。我想我的第一点应该是分析这些模块,当我收到它们时,它们是以什么方式具体实现的。但是谢谢你的努力!我认为首先要做的是在IronPython中运行它们,看看它们是否工作!好运=)你好KatrieleAlex,这是我的更新:我终于说服了cpython开发人员切换到C,因为它对我们的目的更有用。但是非常感谢你的回答!