Graham Dumpleton
grahamd at dscpl.com.au
Wed Apr 20 21:14:42 EDT 2005
On 21/04/2005, at 10:56 AM, Bram wrote: > Are there any special options that can be given to > vampire.importModule() that duplicates "from module import > function/class" style imports or should I just stick to the long > dotted notations for calling these functions/classes? It sure would be > nice to only have to load the code for the functions/classes I needed. I think you misunderstand what "from module import function/class" does. It still loads the whole contents of the module into the process. It doesn't selectively load just the bits you indicate. It is in effect a short cut for saying: import mymodule myfunction = mymodule.myfunction myclass = mymodule.myclass As an example, try the following: from base64 import decode print globals() import sys print dir(sys.modules["base64"]) So, "decode" may be the only thing in your namespace, but the whole module still exists in sys.modules. To avoid dotted notation, you can setup references in your local namespace using: mymodule = vampire.importModule("mymodule",directory) myfunction = mymodule.myfunction myclass = mymodule.myclass Note that the autoreloading mechanism of the Vampire import system actually relies on the module being in the globals namespace if imported at that level, as it uses that as a means of determining parent/child import dependencies and thus when it needs to reimport a parent because of a change in a child. Thus, although you could say: mymodule = vampire.importModule("mymodule",directory) myfunction = mymodule.myfunction myclass = mymodule.myclass del mymodule ### BAD you would then cause the full abilities of the autoreloading mechanism to not work properly. BTW, Vampire doesn't put its loaded modules in sys.modules so if you go looking there for them, you will not find them. Graham
|