我需要在C#项目中使用Python库。我已经将IronPython(版本2.7.8)NuGet安装到了我的项目中,并且获得了以下C#代码:
1. var engine = Python.CreateEngine();
2.
3. var paths = engine.GetSearchPaths();
4. paths.Add(@"C:\path\to\my\Python\standard\library\Lib");
5. engine.SetSearchPaths(paths);
6.
7. dynamic d = engine.ExecuteFile(@"path\to\python\library.py");
8. dynamic x = d.CallSomePythonLibraryFunction();
问题是,Python库(我需要使用)取决于某些Python标准库函数。因此,我向版本2.7.12(第4行)的Python添加了搜索路径,此后出现此错误:
IronPython.Runtime.Exceptions.ImportException: 'No module named _functools'
(_ functools是从functools.py导入的(如果我正确理解的话,我是Python的新手)。
我根本无法克服这个问题,所以我尝试使用另一个版本的Python(最新的3.7),但出现此错误:
Microsoft.Scripting.SyntaxErrorException: 'Non-ASCII character '\xc5' in file C:\Python37\Lib\functools.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details'
现在我知道我必须将编码从默认的Python 2.x ASCII(IronPython使用?!)更改为Python的3.x默认UTF-8,但是我无法确定该怎么做。我尝试添加这些代码行...
var script = engine.CreateScriptSourceFromString(@"import sys
reload(sys)
sys.setdefaultencoding('utf-8')");
script.Execute();
...但是没有帮助。