IronPython 无法导入 os:ImportException:"not a Zipfile"
IronPython cannot import os: ImportException: "not a Zipfile"
我正在尝试从控制台 .NET 4.5 应用程序执行此脚本
脚本:test1.py
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7\Lib')
import os
print os.getcwd()
C#:Program.cs
static void Main(string[] args)
{
ExecuteScript();
Console.Read();
}
private static void ExecuteScript()
{
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
var source = engine.CreateScriptSourceFromFile(@"D:\Scripts\test1.py");
engine.Runtime.IO.RedirectToConsole();
source.Execute(scope);
}
如果我 运行 这个,我得到一个 IronPython.Runtime.Exceptions.ImportException。
如果我忽略此异常(分离 VS 调试器)它会起作用,但我想知道如何正确处理它,或者我是否应该忽略它?
谢谢,
雅恩
截至目前,您只能忽略此非致命的内部异常或禁用 zip 导入支持。
您可以只启用我的代码或排除导入异常中断,而不是完全分离调试器。
要禁用 zip 导入支持,您可以清除(或检查并删除特定的处理程序,如果有多个)path_hooks:
var pc = HostingHelpers.GetLanguageContext(engine) as PythonContext;
var hooks = pc.SystemState.Get__dict__()["path_hooks"] as List;
hooks.Clear();
可以在 the corresponding ticket on github 中找到更多信息。
我遇到了同样的问题,我创建了一个拉取请求,这将解决它。也许它会被接受:)
我的解决方法是,使导入模块有状态:
foreach (object hook in (IEnumerable)pathHooks) {
try {
object handler = PythonCalls.Call(context, hook, dirname);
if (handler != null)
{
if (handler is IImporterModule)
{
if ((handler as IImporterModule).State == ImporterModuleState.Ready)
{
return handler;
}
}
else
{
return handler;
}
}
} catch (ImportException) {
// we can't handle the path
}
}
git-hub 上的拉取请求:https://github.com/IronLanguages/main/pull/1247
我正在尝试从控制台 .NET 4.5 应用程序执行此脚本
脚本:test1.py
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7\Lib')
import os
print os.getcwd()
C#:Program.cs
static void Main(string[] args)
{
ExecuteScript();
Console.Read();
}
private static void ExecuteScript()
{
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
var source = engine.CreateScriptSourceFromFile(@"D:\Scripts\test1.py");
engine.Runtime.IO.RedirectToConsole();
source.Execute(scope);
}
如果我 运行 这个,我得到一个 IronPython.Runtime.Exceptions.ImportException。 如果我忽略此异常(分离 VS 调试器)它会起作用,但我想知道如何正确处理它,或者我是否应该忽略它?
谢谢, 雅恩
截至目前,您只能忽略此非致命的内部异常或禁用 zip 导入支持。
您可以只启用我的代码或排除导入异常中断,而不是完全分离调试器。
要禁用 zip 导入支持,您可以清除(或检查并删除特定的处理程序,如果有多个)path_hooks:
var pc = HostingHelpers.GetLanguageContext(engine) as PythonContext;
var hooks = pc.SystemState.Get__dict__()["path_hooks"] as List;
hooks.Clear();
可以在 the corresponding ticket on github 中找到更多信息。
我遇到了同样的问题,我创建了一个拉取请求,这将解决它。也许它会被接受:)
我的解决方法是,使导入模块有状态:
foreach (object hook in (IEnumerable)pathHooks) {
try {
object handler = PythonCalls.Call(context, hook, dirname);
if (handler != null)
{
if (handler is IImporterModule)
{
if ((handler as IImporterModule).State == ImporterModuleState.Ready)
{
return handler;
}
}
else
{
return handler;
}
}
} catch (ImportException) {
// we can't handle the path
}
}
git-hub 上的拉取请求:https://github.com/IronLanguages/main/pull/1247