在.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.
好的。
经过一些澄清的评论,我相信我现在敢于回答。
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版本?