IronPython ImportException: No module named logging
Asked Answered
A

1

5

I got ironpython working fine on mono, but it doesn't import the logging module. Executing this code:

ScriptEngine engine = Python.CreateEngine();
dynamic logging = engine.ImportModule("logging");

yields the following error:

IronPython.Runtime.Exceptions.ImportException: No module named logging

The IronPython assemblies I have included are up-to-date: IronPython.Modules.dll, Microsoft.Dynamic.dll, Microsoft.Scripting.dll, Microsoft.Scripting.Metadata.dll.

How can I make use of the logging module within Ironpython?

Airflow answered 24/9, 2013 at 7:19 Comment(0)
O
8

It's not enough to add the assemblies to your C# application. logging is written in python, and it's part of the standard library. You'll have to add the standard library to IRONPYTHONPATH as well. You can do it like this:

var engine = Python.CreateEngine();
var paths = engine.GetSearchPaths();
paths.Add(@"C:\Path\to\your\standard\library");
engine.SetSearchPaths(paths);

If you need the standard library you would probably need to ship it with your application. My suggestion is to zip it and then add the zip file to the paths.

Outnumber answered 24/9, 2013 at 7:45 Comment(10)
Thanks for the answer. Is there a generic, platform independent way to add the standard library to the path? I suppose that hardcoding this path will only work on my pcAirflow
@Chiel92 Yes, don't hardcode it. I updated the question. If you ship the standard library with your app, then could infer the (relative or absolute) path to it.Outnumber
Okay, that's kind of a lot of space ;) Like 150 MB. I would like to find a way to still use the system-wide python libAirflow
@Chiel92 They are not 100% compatible. IronPython made some changes to the standard library it ships with the binaries.Outnumber
Good to know. So shipping is really the only option? Or is there a way to have a system-wide ironpython installation? (Its getting more complex now)Airflow
@Chiel92 If you have a system wide IronPython installation then you can use the standard library from the installation. Just take care that the version you use the dlls from and the version installed match. But then, how would you know where it's installed :) Especially if you want to be cross-platform... :-/Outnumber
Well that sucks :) I think shipping ironpython is indeed the way to go for nowAirflow
As i understand it you can zip whatever parts you need.Multicellular
when I include logging by including the logging folder in my path, I then get the error: unexpected token 'exc_info'. Can anyone please offer help with that error?Poleaxe
Which standard library???Concise

© 2022 - 2024 — McMap. All rights reserved.