__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

Reply via email to