
Hi Eric, The case I have been burned by many times is where all globals of ChimeraExtension.py are deleted. In both the ChimeraExtension.py case and opening a *.py file with File / Open the trouble is that if the Python code registers a callback and the callback function tries to use a name in the global name space like calling another function defined in the same file or a global import then it fails. This is extremely confusing when it happens. Tom -------- Original Message -------- Subject: Re: [chimera-dev] [Chimera-users] Programmer's Guide feedback.... From: Eric Pettersen To: chimera-dev Date: 12/15/09 10:55 AM
On Dec 15, 2009, at 9:36 AM, Tom Goddard wrote:
4. The ToolbarButton.py doesn't work unless the "import re" and "import chimera" are in the function body. This is because Chimera deletes all globals after loading a file. This has often been a headache for me and Chimera should not delete globals.
This is a behavior of Python. We load scripts into their own temporary module to avoid pollution of the Chimera main namespace (/e.g./ if the script defined globals named "id" or "sum" or "type" they would override built-in functions of the same name for all future script executions!). When Chimera unloads the temporary module, Python nulls out it's global namespace (to give garbage collection a shot at working).
Now perhaps Chimera shouldn't unload the module. I think this would be a reasonable change. Perhaps it could be discussed at our next internal Chimera developers' meeting to ensure that I'm not forgetting any other ramifications that the change might have.
--Eric
Eric Pettersen UCSF Computer Graphics Lab http://www.cgl.ucsf.edu
------------------------------------------------------------------------
_______________________________________________ Chimera-dev mailing list Chimera-dev@cgl.ucsf.edu http://www.cgl.ucsf.edu/mailman/listinfo/chimera-dev