IronPython ResourceMetaPathImporter 失败
IronPython ResourceMetaPathImporter failure
许多使用 ResourceMetaPathImporter 的解决方案如下所示:
ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(options);
var pyRuntime = new ScriptRuntime(setup);
var engineInstance = Python.GetEngine(pyRuntime);
var engine = Python.CreateEngine();
var sysScope = engine.GetSysModule();
List metaPath = sysScope.GetVariable("meta_path");
var importer = new ResourceMetaPathImporter(typeof(EmbeddedPythonEngine).Assembly, "python_27_lib.zip");
metaPath.Add(importer);
sysScope.SetVariable("meta_path", metaPath);
var source = "import csv";
var script = engineInstance.CreateScriptSourceFromString(source, SourceCodeKind.Statements);
script.Execute();
特别是,这段代码模仿了这个答案:。但是我使用的是 IronPython 2.7.5,上面的代码片段总是抱怨没有 csv 模块。
谁能告诉我这个问题? 2.7.5 以某种方式损坏了吗?我觉得我错过了一些明显的东西。
您的问题与 IronPython 2.7.5 无关,而是您的运行时设置或压缩库。您的代码片段没有显示提供了哪些选项,但该区域似乎出了问题。如果提供的选项为空或不足,import csv
将失败。
如果您删除脚本运行时设置(前三行)并仅使用在 Python.CreateEngine()
中创建的引擎而不是 engineInstance
,事情应该会按预期工作。
完整的片段看起来像
var engine = Python.CreateEngine();
var sysScope = engine.GetSysModule();
List metaPath = sysScope.GetVariable("meta_path");
var importer = new ResourceMetaPathImporter(typeof(EmbeddedPythonEngine).Assembly, "python_27_lib.zip");
metaPath.Add(importer);
sysScope.SetVariable("meta_path", metaPath);
var source = "import csv";
var script = engine.CreateScriptSourceFromString(source, SourceCodeKind.Statements);
script.Execute();
如问题作者所述 - 压缩库存档中的错误文件夹结构也会导致导入错误。
许多使用 ResourceMetaPathImporter 的解决方案如下所示:
ScriptRuntimeSetup setup = Python.CreateRuntimeSetup(options);
var pyRuntime = new ScriptRuntime(setup);
var engineInstance = Python.GetEngine(pyRuntime);
var engine = Python.CreateEngine();
var sysScope = engine.GetSysModule();
List metaPath = sysScope.GetVariable("meta_path");
var importer = new ResourceMetaPathImporter(typeof(EmbeddedPythonEngine).Assembly, "python_27_lib.zip");
metaPath.Add(importer);
sysScope.SetVariable("meta_path", metaPath);
var source = "import csv";
var script = engineInstance.CreateScriptSourceFromString(source, SourceCodeKind.Statements);
script.Execute();
特别是,这段代码模仿了这个答案:
谁能告诉我这个问题? 2.7.5 以某种方式损坏了吗?我觉得我错过了一些明显的东西。
您的问题与 IronPython 2.7.5 无关,而是您的运行时设置或压缩库。您的代码片段没有显示提供了哪些选项,但该区域似乎出了问题。如果提供的选项为空或不足,import csv
将失败。
如果您删除脚本运行时设置(前三行)并仅使用在 Python.CreateEngine()
中创建的引擎而不是 engineInstance
,事情应该会按预期工作。
完整的片段看起来像
var engine = Python.CreateEngine();
var sysScope = engine.GetSysModule();
List metaPath = sysScope.GetVariable("meta_path");
var importer = new ResourceMetaPathImporter(typeof(EmbeddedPythonEngine).Assembly, "python_27_lib.zip");
metaPath.Add(importer);
sysScope.SetVariable("meta_path", metaPath);
var source = "import csv";
var script = engine.CreateScriptSourceFromString(source, SourceCodeKind.Statements);
script.Execute();
如问题作者所述 - 压缩库存档中的错误文件夹结构也会导致导入错误。