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 パッケージは、Lib という名前のフォルダー内の C# アプリの Debug フォルダーに配置する必要がありました。(別の名前のフォルダーにある可能性もあると思いますが、これは私にとってはより高速でした。)
  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 に答える