.NET 和 Python 通过 IronPython 互操作

.NET and Python interop via IronPython

我正在尝试使我的一些 Python 脚本可从 .NET 调用。我发现 IronPython 是完成此任务的好工具。所以我尝试使用它,但现在我有以下问题:

  1. 如何将软件包安装到 IronPython?我现有的 Python 代码使用它们,所以我需要安装它们。我试过按照this guide安装pip,但是得到了Process is terminated due to WhosebugException.,还没有找到解决问题的方法。
  2. 假设我能够安装包,那么具有 C/C++ 绑定的包是否仍然不能在 IronPython 中使用?因为the FAQ page上面写着NumPy和SciPy不能安装,但是页面好像比较旧
  3. 如何从其他 .NET 代码访问 Python 代码? The documentation page 说我必须使用 DLR Hosting API,因为从 IronPython 编译的程序集不符合 CLS。但是我不知道如何让它与包一起工作。
  4. 也许还有另一种方法可以从 .NET 调用 Python 代码?

提前致谢。

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

  1. pip 的问题是因为我尝试使用 ipy64。使用ipy解决了问题
  2. 是的,今天无法使用具有 C/C++ 绑定的包。
  3. 假设 pip 和 requests 是使用 ipy -X:Frames -m ensurepipipy -X:Frames -m pip install requests 安装的(有关 IronPython 中 pip 的更多信息,请参见 here ).可以通过以下方式使用 DLR 托管 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 的更多信息可以在托管 IronPython 部分下的 IronPython 文档文件(默认位置为 C:\Program Files (x86)\IronPython 2.7\Doc\IronPython.chm)中找到。

  4. 可以使用 Python for .NET 从 .NET 调用 CPython 代码。