[IronPython] Loading DLL from pyc.py into ScriptEngine

Srivatsn Narayanan srivatsn at microsoft.com
Wed Aug 27 00:34:19 CEST 2008

Also Assembly.Load is not sufficient to be able to import the compiled code. A clr.AddReference needs to be done which publishes the module. The easiest way to do that is include it in the string as Michael pointed out.

ScriptSource source = engine.CreateScriptSourceFromString("import clr;clr.AddReference(\"test.dll\");import test", SourceCodeKind.Statements);

You might need to add the current folder to the path as well before the clr.AddReference.

-----Original Message-----
From: users-bounces at lists.ironpython.com [mailto:users-bounces at lists.ironpython.com] On Behalf Of Michael Foord
Sent: Tuesday, August 26, 2008 3:12 PM
To: hellosticky at gmail.com; Discussion of IronPython
Subject: Re: [IronPython] Loading DLL from pyc.py into ScriptEngine

hellosticky wrote:
> I also tried:
>             Assembly assembly = Assembly.Load(AssemblyName);
>             ScriptRuntime runtime = ScriptRuntime.Create();
>             runtime.LoadAssembly(assembly);
>             ScriptScope scope = runtime.ExecuteFile("test.py");
>             object o = scope.Execute(null);
> But that threw a script not found exception saying it could find the source file for test.py, so it would seem like this wants to recompile it
>> -----Original Message-----
>> From: hellosticky [mailto:hellosticky at gmail.com]
>> Sent: Tuesday, August 26, 2008 5:52 PM
>> To: IronPython
>> Subject: Loading DLL from pyc.py into ScriptEngine
>> Hi,
>> I created an IronPython DLL with "ipy.exe pyc.py /out:test
>> /target:dll test.py" which created test.dll. Now, from C#,
>> I'd like to execute test.py from test.dll. I just opened up
>> dlr-spec-hosting and there's a CreateScriptSourceFromStream,
>> but I don't see that in 2.0 Beta 4 bits. Here is where I'm
>> stuck. How do I get that assembly into the engine and then
>> execute test.py?

Well - the easiest way is to execute 'import test' after having added
the assembly. This should execute the code in order to create a module.

ScriptScope scope = engine.CreateScope();
ScriptSource source = engine.CreateScriptSourceFromString("import test",

There is an API for setting a stream as stdout on an engine -


>>  Also, I'd like to get the output into a
>> string (I guess I can just redirect Console.Out?)
>> public string Execute(string assemblyName)
>> {
>>     string content = null;
>>     Assembly assembly = Assembly.Load(assemblyName);
>>     ScriptRuntime runtime = ScriptRuntime.Create();
>>     ObjectOperations operations = runtime.CreateOperations();
>>     ScriptEngine engine = runtime.GetEngine("py");
>>     // magic..
>>     return content;
>> }
>> Thanks,
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


Users mailing list
Users at lists.ironpython.com

More information about the Ironpython-users mailing list