通过IronPython实现.NET和Python interop
问题描述:
我试图让我的一些Python脚本可以从.NET调用。我发现IronPython是一个很好的工具来完成这个任务。所以我试图使用它,但现在我有以下问题:通过IronPython实现.NET和Python interop
- 如何将软件包安装到IronPython?我现有的Python代码使用它们,所以我需要安装它们。我试图按照this guide来安装点子,但得到了
Process is terminated due to StackOverflowException.
,并没有找到解决问题的方法。 - 假设我可以安装软件包,在IronPython中是否仍然有包含C/C++绑定的软件包?因为在the FAQ page被写为NumPy和SciPy无法安装,但该网页似乎是相当老。
- 从其他.NET代码访问Python代码怎么样? The documentation page表示我必须使用DLR Hosting API,因为从IronPython编译的程序集不符合CLS。但我不知道如何使它与包一起工作。
- 也许有另一种方法从.NET调用Python代码?
在此先感谢。
答
好吧,我想我已经弄明白了。
- pip的问题是由于我尝试使用ipy64的事实。使用ipy解决了这个问题。
- 是的,今天不可能在C/C++绑定中使用包。
-
让我们假设使用
ipy -X:Frames -m ensurepip
和ipy -X:Frames -m pip install requests
安装pip和请求(有关IronPython中pip的更多信息,请参见here)。var engine = IronPython.Hosting.Python.CreateEngine(new Dictionary<string, object> {{"Frames", true}}); var searchPaths = engine.GetSearchPaths(); searchPaths.Add(@"C:\Program Files (x86)\IronPython 2.7\Lib"); searchPaths.Add(@"C:\Program Files (x86)\IronPython 2.7\Lib\site-packages"); engine.SetSearchPaths(searchPaths); engine.CreateScriptSourceFromString("import requests; r = requests.get('http://www.google.com/'); print r.status_code").Execute();
对主办Python可以在IronPython的文档文件(默认位置是
C:\Program Files (x86)\IronPython 2.7\Doc\IronPython.chm
)发现在托管IronPython的部分更多信息:请求可以使用DLR以下列方式托管API来使用。 - 由于denfromufa建议可以使用Python for .NET从.NET调用CPython代码。
http://www.python4.net – denfromufa
@denfromufa感谢您提供可能的解决方案。正如我看到Python for Python需要完整的CPython安装。有没有办法将解释器和安装的软件包“打包”(不知道如何调用这个过程),并将其用于.NET中的解释器?我希望我的想法是可以理解的。 – DfM
是的,你需要指向使用pythonhome和path env的独立CPython解释器的位置。从.NET调用时发生变化 – denfromufa