Я пытаюсь запустить простой скрипт на Python в моем приложении .net, используя IronPython. Я установил пакет nuget в проект (я НЕ установил ironpython cli на моей машине) и создал этот код для обработки путей установки, чтения вывода и ввода ввода.
this.engine = Python.CreateEngine();
this.scope = this.engine.CreateScope();
this.streamOut = new MemoryStream();
this.streamErr = new MemoryStream();
this.engine.Runtime.IO.SetOutput(this.streamOut, Encoding.Default);
this.engine.Runtime.IO.SetErrorOutput(this.streamErr, Encoding.Default);
// this is a locally set environment variable
string pythonRootPath = Environment.GetEnvironmentVariable("PythonPath");
ICollection<string> searchPaths = engine.GetSearchPaths();
searchPaths.Add($@"{pythonRootPath}\Lib\site-packages\");
searchPaths.Add($@"{pythonRootPath}\Lib");
engine.SetSearchPaths(searchPaths);
this.engine.Execute(@"import jinja2");
Выполнение скрипта приводит к следующему исключению
IronPython.Runtime.Exceptions.ImportException: 'No module named errno'
Мой проект C # содержит ссылки на следующие соответствующие (для IronPython) сборки:
- IronPython (v2.7.9)
- IronPython.Modules
- IronPython.SQLite
- IronPython.Wpf
- Microsoft.Dynamic
- Microsoft.Scripting
- Microsoft.Scripting.Metadata
Мои пути выглядят достаточно хорошо настроенными для моих целей, поскольку не импорт самого jinja2 вызывает ошибку, и я могу импортировать некоторые стандартные библиотечные модули. Однако я видел, что пакет os
не может быть импортирован по той же причине, что и jinja2. Я также не могу импортировать errno напрямую, как ожидалось, но я могу импортировать его напрямую, если я запускаю его через python 2.7 cli, чтобы пакет был установлен.
У меня очень много идей, если у кого-то есть какие-либо предложения.