I don't know the answer to the original question, but this is not exactly
correct:
Another alternative would be to change your code to look like this:
class MyClass(SomeNameSpace.IMyInterface):
def SomeFunc(self):
from mymod import myfunc
myfunc()
That way, the import gets re-run each time you run SomeFunc, and
you'll always get the latest version of the module.
This will not re-import mymod every time the function is run. Once you run
"from foo import bar" or "import foo" then the "foo" module is loaded into
python and will not be reloaded from python without an explicit call to the
reload function. For example, let's say you have the following code in
mymod.py:
def foo():
print "called foo()"
def bar():
print "called bar()"
print "Loaded..."
And then you run this code:
def test1():
from mymod import foo
foo()
def test2():
from mymod import bar
bar()
test1()
test2()
import mymod
mymod.foo()
"Loaded..." will be printed only once, because the module is only loaded once,
and never reloaded. This is a very useful feature which Python has supported
for quite some time, allowing you to sprinkle "from foo import blah" around
your code, and if and only if you hit one of these will the module be loaded,
and it will only be loaded once.
Back to the original question, are you saying that if you restart your C#
program that the changed "mymod" is not loaded properly, or are you modifying
the script while the C# program is running?
-Lee
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Curt Hagenlocher
Sent: Wednesday, January 09, 2008 9:16 AM
To: Discussion of IronPython
Subject: Re: [IronPython] Clearing context
On Jan 9, 2008 8:54 AM, Slide <[EMAIL PROTECTED]> wrote:
>
> If I change this file and try reloading my script, it takes the
> modifications just fine and runs the new code. If I modify mymod, but
> not the main script, I get the old code from mymod run. Is there
> something I can do to force it to reload the imported scripts as well?
There's no straightforward and reliable way to track usage, so the
only thing you could do generically is to reload *all* your modules.
One thing you could do would be to say "import mymod" in any other
module using mymod. After a reload of mymod, you could then iterate
over sys.modules and reload any module containing the symbol "mymod".
It's not foolproof, but it's probably good enough.
Another alternative would be to change your code to look like this:
class MyClass(SomeNameSpace.IMyInterface):
def SomeFunc(self):
from mymod import myfunc
myfunc()
That way, the import gets re-run each time you run SomeFunc, and
you'll always get the latest version of the module.
--
Curt Hagenlocher
[EMAIL PROTECTED]
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com