Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.NET与托管Python(CPython)的互操作性-->;有什么问题吗?_C#_.net_Python_Interop_Ironpython - Fatal编程技术网

C#.NET与托管Python(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模块,反之亦然->这些模块是托管还是非托管执行的?如果我

我正在设计一个应用程序。核心应该用C#编写,但我还想使用一些已经完成的CPython模块(未管理)

所以我对互操作性感兴趣(从C#调用CPython方法,从CPython调用C)。如果有问题,因为C#在.NET运行时内运行(托管),而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,因为它对我们的目的更有用。但是非常感谢你的回答!