在.NET C#中集成Python脚本

时间:2015-11-16 12:34:16

标签: c# python .net nltk ironpython

我正在尝试使用IronPython作为桥梁在我当前的应用程序中将非常复杂的Python脚本集成到.NET平台中。

在我的python脚本中,我使用NLTK以及其他一些字符串分类器,如false,这是我的导入:

sklearn.naive_bayes

此外,我在此脚本中还有一个函数,它接收一个字符串作为参数并返回一些输出示例:

import nltk

from nltk.classify.scikitlearn import SklearnClassifier
import pickle

from sklearn.naive_bayes import MultinomialNB, BernoulliNB

from sklearn.linear_model import LogisticRegression, SGDClassifier

我想从我的.NET应用程序调用此函数,我使用此代码调用函数:

def testFunction(text):
    #do some things
    return somethings

当我尝试执行代码时,我得到以下错误:

        ScriptEngine engine;
        ScriptScope scope;
        ScriptSource source;
        CompiledCode compiled;

        engine = Python.CreateEngine();
        scope = engine.CreateScope();

        ICollection<string> paths = engine.GetSearchPaths();
        string dir = @"C:\Users\Desktop\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\Lib";
        paths.Add(dir);
        string dir2 = @"C:\Users\Desktop\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\Lib\site-packages";
        paths.Add(dir2);

        engine.SetSearchPaths(paths);

        //loading and compiling code
        source = engine.CreateScriptSourceFromFile(@"C:\Users\Desktop\script.py");


        compiled = source.Compile();

        //now executing this code (the code should contain a class)
        compiled.Execute(scope);

我想用字符串调用SyntaxErrorException -> unexpected token 'from'. ,然后在.NET中使用该函数输出。

1 个答案:

答案 0 :(得分:1)

确定。

经过一些澄清评论后,我相信我现在敢回答。

Ironpython(目前)是ironpython 2.7(对应于python 2.7) 从这一行:

string dir = @"C:\Users\Desktop\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\Lib";

很明显,您正在尝试从python 3.4加载模块

在评论中,有人提到Idle用于测试python脚本,但是Idle将使用已安装的Python版本(或者如果安装了多个版本,则每个版本都安装一个Idle)

在本例中,您使用Python 3.4测试的Idle IDE

Python 2.x和Python 3.x是两个不同的编程 $ {interfaces / compilers / interpreters} 。用于编写脚本的语言不是100%相同。

Python 3并不完全向后兼容python 2.因为某些语法被修改了。 (与新版本的编译器支持旧代码的.NET不同。)

这里是一些关键差异的链接: http://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html

尝试使用ironPython3而不是ironPython,根据我的经验还没有完全成熟,我还没有在生产环境中使用它,但如果你真的依赖python 3模块,并且需要运行python作为.Net兼容的脚本引擎,这是我的建议。

https://github.com/IronLanguages/ironpython3

否则请帮助自己,并查看与版本2.x兼容的查找相同python模块的选项 或者通过插入python版本标识块来自己修改它们

How do I check what version of Python is running my script?