我正在尝试使用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中使用该函数输出。
答案 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版本标识块来自己修改它们