.NET和Python通过IronPython互操作

时间:2017-06-02 11:11:58

标签: python .net interop ironpython

我试图让我的一些Python脚本可以从.NET调用。我发现IronPython是实现这一目标的好工具。所以我试图使用它,但现在我有以下问题:

  1. 如何将软件包安装到IronPython?我现有的Python代码使用它们,所以我需要安装它们。我已尝试按this guide安装点子,但获得了Process is terminated due to StackOverflowException.并且找不到解决问题的方法。
  2. 假设我能够安装软件包,那么在IronPython中是否仍然无法使用带有C / C ++绑定的软件包?因为在the FAQ page上写的是NumPy和SciPy无法安装,但页面似乎相当陈旧。
  3. 从其他.NET代码访问Python代码怎么样? The documentation page说我必须使用DLR Hosting API,因为从IronPython编译的程序集不符合CLS。但我无法了解如何使其与包一起使用。
  4. 也许还有另一种方法可以从.NET调用Python代码?
  5. 提前致谢。

1 个答案:

答案 0 :(得分:2)

好吧,我想我已经弄明白了。

  1. pip的问题是因为我试图使用ipy64。使用ipy解决了这个问题。
  2. 是的,今天不可能使用带有C / C ++绑定的包。
  3. 让我们假设使用ipy -X:Frames -m ensurepipipy -X:Frames -m pip install requests安装了pip和请求(可以找到有关IronPython中pip的更多信息here)。可以使用DLR Hosting API以下列方式使用请求:

    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的更多信息,请参阅Hosting IronPython部分下的IronPython文档文件(默认位置为C:\Program Files (x86)\IronPython 2.7\Doc\IronPython.chm)。

  4. As denfromufa has suggested可以使用Python for .NET从.NET调用CPython代码。