[Ironpython-users] Loading python compiled with clr.CompileModule

Josiah Kiehl jkiehl at riotgames.com
Thu Apr 5 12:23:06 EDT 2018


Got it. Thanks for the answers. I'll hang on to this work for future when
compile module works in .net core. Is that an eventual plan?

On Thu, Apr 5, 2018, 6:45 AM Stéphane Lozier <stephane.lozier at gmail.com>
wrote:

> It sounds like you were already doing what I was suggesting trying. The
> "full framework" version is what you get when you install using the MSI.
> The zip file in releases link contains the .NET Core version of the
> interpreter but like I said it doesn't support CompileModule.
>
> I think you may be out of luck on this since there's currently no way to
> compile the code for .NET Core and the assembly generated using full .NET
> doesn't work...
>
> Stéphane
>
> On Wed, Apr 4, 2018 at 1:38 PM, Josiah Kiehl <jkiehl at riotgames.com> wrote:
>
>> Oh! I understand now, thanks for clarifying. Yes, that's the problem. You
>> mentioned that there is a "full framework" version I could compile my dlls
>> with? I poked around the releases and I wasn't sure what you were
>> referencing, specifically.
>>
>> I installed via the 2.7.8 msi from here:
>> https://github.com/IronLanguages/ironpython2/releases. Is there a
>> release with dotnet core or can I build one?
>>
>> I did notice that I can't compile via running the compile script in the
>> embedded IronPython in dotnet core, as CompileModule is not supported.
>>
>> Thanks so much for answering my questions, this is extremely helpful.
>> Josiah
>>
>> On Wed, Apr 4, 2018, 6:16 AM Stéphane Lozier <stephane.lozier at gmail.com>
>> wrote:
>>
>>> I assumed you were using .NET Core when you said you were using dotnet
>>> 2.0.3. So you are compiling using ipy.exe (which is a .NET 4.5 app) and
>>> then using the assembly from a .NET Core 2.0 application? The .NET Core API
>>> doesn't expose System.Runtime.CompilerServices.Closure so that might be the
>>> reason things are failing...
>>>
>>> Stéphane
>>>
>>> On Tue, Apr 3, 2018 at 5:53 PM, Josiah Kiehl <jkiehl at riotgames.com>
>>> wrote:
>>>
>>>> Sorry if I'm not understanding... when you say "full framework
>>>> version", do you mean the stand alone executable, ipy.exe?
>>>>
>>>> I compiled the dll with ipy.exe running a simple script:
>>>>
>>>> > ipy compile.py
>>>>
>>>> # compile.py
>>>> import clr
>>>>
>>>> clr.CompileModules("compiled.dll", "test.py")
>>>>
>>>> This works just fine.
>>>>
>>>> Then I tried to load "compiled.dll" via the embedded IronPython in a
>>>> simple dotnet CLI app and it produces the above error:
>>>>
>>>> ScriptEngine engine = Python.CreateEngine();
>>>>
>>>> engine.Runtime.LoadAssembly(Assembly.LoadFile(@"C:\some\path\compiled.dll"));
>>>> var scope = engine.Runtime.ImportModule("test");
>>>>
>>>> Is that what's not supported? Loading the dll in the embedded
>>>> IronPython?
>>>>
>>>> Thanks for your help, I am super hopeful I can get this working.
>>>> Josiah
>>>>
>>>> On Tue, Apr 3, 2018 at 2:39 PM Stéphane Lozier <
>>>> stephane.lozier at gmail.com> wrote:
>>>>
>>>>> The .NET Core version of IronPython does not support assembly
>>>>> generation. I haven't tried it myself, but you could probably compile the
>>>>> assembly using the full framework version and then run it with .NET Core
>>>>> 2.0 (assuming you're not using unsupported APIs).
>>>>>
>>>>> Stéphane
>>>>>
>>>>>
>>>>> On Tue, Apr 3, 2018, 5:16 PM Josiah Kiehl, <jkiehl at riotgames.com>
>>>>> wrote:
>>>>>
>>>>>> Oh, I'm on dotnet 2.0.3, if that's relevant information.
>>>>>>
>>>>>> On Tue, Apr 3, 2018 at 2:15 PM Josiah Kiehl <jkiehl at riotgames.com>
>>>>>> wrote:
>>>>>>
>>>>>>> I'm trying to execute this example code:
>>>>>>>
>>>>>>> https://stackoverflow.com/questions/32639893/call-dll-function-from-c-sharp-ironpython
>>>>>>>
>>>>>>> I realize the posted question is a few years old at this point...
>>>>>>> has something changed in how python, compiled to a DLL via
>>>>>>> clr.CompileModule, is loaded?
>>>>>>>
>>>>>>> I'm getting this error when I run the code in the example at the
>>>>>>> above link:
>>>>>>> Unhandled Exception: System.TypeLoadException: Could not load type
>>>>>>> 'System.Runtime.CompilerServices.Closure' from assembly 'System.Core,
>>>>>>> Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
>>>>>>>    at DLRCachedCode.test$1(CodeContext $globalContext, FunctionCode
>>>>>>> $functionCode)
>>>>>>>    at IronPython.Compiler.OnDiskScriptCode.Run()
>>>>>>>
>>>>>>> (full stack:
>>>>>>> https://gist.github.com/capoferro/5a730088582b8cd36591be510d6ca2fc)
>>>>>>>
>>>>>>> My ipy.exe, which did the compilation, is 2.7.8.0 and my embedded
>>>>>>> IronPython is 2.7.8.1, though I get the same error on 2.7.8.0.
>>>>>>>
>>>>>>> Am I missing something obvious or is there a better example to use?
>>>>>>>
>>>>>>> My end goal is to be able to take a python module defined in a file
>>>>>>> (foo.py) with some functions defined, compile it into a dll via
>>>>>>> CompileModule, then load it directly from the dll via ImportModule to skip
>>>>>>> the performance hit of interpreting the Python at runtime.
>>>>>>>
>>>>>>> Thanks!
>>>>>>> Josiah
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>> Ironpython-users mailing list
>>>>>> Ironpython-users at python.org
>>>>>> https://mail.python.org/mailman/listinfo/ironpython-users
>>>>>>
>>>>>
>>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20180405/552412e2/attachment.html>


More information about the Ironpython-users mailing list