C#代码调用导入两个包的IronPython脚本

时间:2014-02-03 04:04:56

标签: c# ironpython

我的C#代码调用导入两个包的IronPython脚本。

我的环境是:

  • 从GitHub安装IronPython 2.7.1。
  • 安装了Enthought的Python。
  • 我正在使用Visual Studio 2012和C#4.5来开发我的测试项目。
  • 我在Windows Server 2012 R2(x64)上运行。

我也补充说    以下对我的项目的引用:

   IronPython
   IronPython.Modules
   Microsoft Scripting
   Microsoft.Dynamic

我的C#代码是:

using System;
using IronPython.Hosting;
namespace RunExternalScript {
  internal class Program {
    private static void Main() {
      var py = Python.CreateEngine();
      try {
        py.ExecuteFile("script.py");
      } catch (Exception ex) {
        Console.WriteLine("Oops! We couldn't execute the script because of an exception: " + ex.Message);
      }
      Console.WriteLine("Press enter to exit...");
      Console.ReadLine();
    }
  }
}

Python script.py是:

import pickel
import numpy
print('Imports work.')

如果我注释掉这两个导入,程序就可以了。 我的真实剧本需要“pickel”和“numpy”包。

如何让我的Python脚本导入这两个包?

查尔斯

1 个答案:

答案 0 :(得分:1)

您可以使用PythonEngine.SetSearchPaths(...)函数告诉IronPython在哪里搜索包。

例如

var py = Python.CreateEngine();
private List<string> m_searchPaths = new List<string>();
m_searchPaths.Add(AppDomain.CurrentDomain.BaseDirectory + @"\Lib");
m_searchPaths.Add(@"C:\Python27\lib");
// Add any other Path you want to add in search path
py.SetSearchPaths(m_searchPaths);
try
{
    py.ExecuteFile("script.py");
}
catch (Exception ex)
{
    Console.WriteLine("Oops! We couldn't execute the script because of an exception: " + ex.Message);
}