__future__ is a standard library module that must be on the path in
order to do future imports. You must put the directory containing this
module (or preferably all the standard library) into sys.path before
importing it.
The ScriptRuntime or ScriptEngine has a SetSearchPaths method that
allows you to do this from C#.
All the best,
Michael Foord
On 14/12/2009 10:18, Lukas Cenovsky wrote:
Hi,
I've found that the from __future__ import ... works in .py file run
by ipy.exe but not when I create an engine in C#.
test.py:
from __future__ import division
print 'done'
test.cs:
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using IronPython.Hosting;
namespace TestDuture
{
public class Test
{
static void Main(string[] args)
{
ScriptEngine engine = Python.CreateEngine();
ScriptRuntime runtime = engine.Runtime;
ScriptScope scope = runtime.CreateScope();
ScriptSource source =
engine.CreateScriptSourceFromFile("test.py");
source.Execute(scope);
}
}
}
build command:
csc /r:Microsoft.Dynamic.dll /r:Microsoft.Scripting.core.dll
/r:Microsoft.Scripting.dll /r:IronPython.dll /r:IronPython.Modules.dll
test.cs
Running test.exe throws exception:
C:\Users\dev\Documents\FutureTest>test.exe
Unhandled Exception: IronPython.Runtime.Exceptions.ImportException: No
module named __future__
at
Microsoft.Scripting.Actions.Calls.MethodCandidate.Caller.Call(Object[]
args, Boolean& shouldOptimize)
at
IronPython.Runtime.Types.BuiltinFunction.BuiltinFunctionCaller`5.Call4(CallSite
site, CodeContext context, TFuncType func, T0 arg0, T1 arg1, T2 arg2,
T3 arg3)
at
System.Dynamic.UpdateDelegates.UpdateAndExecute6[T0,T1,T2,T3,T4,T5,TRet](CallSite
site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5)
at IronPython.Runtime.Importer.Import(CodeContext context, String
fullName, PythonTuple from, Int32 level)
at
IronPython.Runtime.Operations.PythonOps.ImportWithNames(CodeContext
context, String fullName, String[] names, Int32 level)
at Microsoft.Scripting.Utils.InvokeHelper`5.Invoke(Object arg0,
Object arg1, Object arg2, Object arg3)
at Microsoft.Scripting.Utils.ReflectedCaller.Invoke(Object[] args)
at
Microsoft.Scripting.Interpreter.CallInstruction.Run(InterpretedFrame
frame)
at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame
frame)
at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0
arg0, T1 arg1)
at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
at IronPython.Compiler.PythonScriptCode.Run(Scope scope)
at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
at Microsoft.Scripting.SourceUnit.Execute(Scope scope, ErrorSink
errorSink)
at Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)
at TestDuture.Test.Main(String[] args)
Am I missing something? It works ok when I add __future__.py from
Python 2.6.
--
-- Lukáš
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog
_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com