在.NET C#中集成Python脚本

本文关键字:Python 脚本 集成 NET | 更新日期: 2023-09-27 18:22:02

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

在我的python脚本中,我使用NLTK和其他一些字符串分类器,如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

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

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

我想从我的.NET应用程序中调用这个函数,我正在使用以下代码来调用函数:

        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'.

我想用字符串调用testFunction,然后在.NET.

在.NET C#中集成Python脚本

中使用该函数的输出

好的。

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

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安装)

在这种情况下,您在中测试的Idle IDE使用了Python 3.4

Python 2.x和Python 3.x是两种不同的编程方式。用于编写脚本的语言并非100%相同。

Python3与Python2不完全向后兼容。由于某些语法被修改。(与.NET不同,在.NET中,新版本的编译器支持旧代码)。

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

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

https://github.com/IronLanguages/ironpython3

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

如何检查运行脚本的Python版本?