1

我正在尝试在IronPython的帮助下执行在C#中使用pyparsing的 python 脚本。但是当我尝试运行脚本时,我得到了ImportException。我试图向包含pyparsing的目录添加路径,但我仍然没有管理如何以正确的方式运行它。No module named pyparsing

这是C#代码:

string ExecutePythonScript(string path, string text)
    {
        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();

        string dir = System.IO.Path.GetDirectoryName("pyparsing-1.5.7");

        ICollection<string> paths = engine.GetSearchPaths();

        if (!String.IsNullOrEmpty(dir))
        {
            paths.Add(dir);
        }
        else
        {
            paths.Add(Environment.CurrentDirectory);
        }
        engine.SetSearchPaths(paths);

        scope.SetVariable("text", text);
        engine.ExecuteFile(path, scope);

        return scope.GetVariable("result");
    }

当然,在 python 脚本的开头我导入了 pyparsing

4

1 回答 1

1

感谢我的朋友,我发现了问题所在。

  1. 解压后的 pyparsing 包必须放在 C# 应用程序的 Debug 文件夹中名为 Lib 的文件夹中。(我想它也可以在另一个名称的文件夹中,但这对我来说更快。)
  2. 感谢这个页面,我还意识到我需要在 C# 应用程序中添加一些代码行。

所以现在是:

    string ExecutePythonScript(string path, string text)
    {
        ScriptEngine engine = Python.CreateEngine();
        ScriptScope scope = engine.CreateScope();

        ICollection<string> Paths = engine.GetSearchPaths();
        Paths.Add(".");
        Paths.Add("D:\\DevTools\\IronPython 2.7\\Lib");
        Paths.Add("D:\\DevTools\\IronPython 2.7\\DLLs");
        Paths.Add("D:\\DevTools\\IronPython 2.7");
        Paths.Add("D:\\DevTools\\IronPython 2.7\\lib\\site-packages");
        engine.SetSearchPaths(Paths);

        scope.SetVariable("text", text);
        engine.ExecuteFile(path, scope);
        (...)

而且它至少没有创建那个异常。

于 2013-06-06T21:45:29.460 回答