[IronPython] register module with an IronPython engine
Fredrik Lundh
fredrik at pythonware.com
Thu Oct 26 11:42:47 CEST 2006
Dino Viehland wrote:
> You can apply the PythonModule to your assembly specifying the type
> that corresponds with the module type. In 1.0.1 our site.py will load any
> DLLs in the "DLLs" directory and the module will be available for you to
> import. The type that PythonModule references should be a static type
> (no instance members).
I was probably a bit unclear, but I want to inject the module from inside
the embedding application. i.e. something like
engine = new PythonEngine();
engine.AddObjectAsModule("myapp", new MyAppProxy());
engine.Execute(
"import myapp\n" +
"myapp.ping()"
);
where MyAppProxy is some suitable object that has a "ping" method. I
can easily do
engine = new PythonEngine();
engine.GlobalsAdd("myapp", new MyAppProxy());
engine.Execute(
"myapp.ping()"
);
but that only makes "myapp" available for executed code, not for other
modules, and it makes it harder to write code that can run in other con-
texts (in this case, a CPython prototype/test harness).
we've currently solved this by using a separate python module to make
the contents of the global "myapp" available as a module:
engine = new PythonEngine();
engine.GlobalsAdd("_myapp", new MyAppProxy());
engine.Execute("import myapp; myapp.init(_myapp)");
(where myapp.init copies relevant attributes to module globals)
but I would like to get rid of that extra layer, if possible.
(I'm probably missing something trivial here)
cheers /F
More information about the Ironpython-users
mailing list