Hi Matt, python has some limited support to reload a module. I actually used that a lot when developing the plugin manager. This is just a hint, use with caution:
set_key F1, import pmg_tk;reload(pmg_tk.startup.foo) https://docs.python.org/2/library/functions.html#reload This will not re-invoke the plugin registration function (__init_plugin__) so if you have a menu item for your GUI, that might still launch the old (not reloaded) version. Cheers, Thomas On 18 Jul 2014, at 14:12, Matthew Baumgartner <mp...@pitt.edu> wrote: > Hi, > It is possible for users to run without a GUI, but it has a GUI and when I am > making changes to it I would like faster turn around times between edits to > my code. > Matt > On 07/18/2014 02:08 PM, Sampson, Jared wrote: >> Hi Matt - >> >> Does your plugin require a GUI, or can you rely on scripted commands and >> output files for your tests? >> >> For any tests that don’t need the GUI, you might consider running them with >> something like `pymol -ckq my_test.pml`. >> >> http://www.pymolwiki.org/index.php/Command_Line_Options >> >> Cheers, >> Jared >> >> -- >> Jared Sampson >> Xiangpeng Kong Lab >> NYU Langone Medical Center >> http://kong.med.nyu.edu/ >> >> >> >> >> >> >> On Jul 18, 2014, at 1:47 PM, Matthew Baumgartner <mp...@pitt.edu> wrote: >> >>> Hi, >>> Thank you for you suggestions. >>> However, I was looking for a way to do it without restarting pymol if >>> possible. Currently, restarting is the fastest solution, but it still takes >>> up about 10-15 seconds to close pymol, restart it, and have it load the >>> structures I need to test my script. >>> >>> One question that I have is that when pymol starts up, does it load the >>> scripts in the plugin menu into memory? Or when you click on the plugin in >>> the menu, does that read from a file on the disk somewhere? >>> My testing indicates the former, because launching pymol and then editing >>> the script in the ~/.pymol/startup folder does not change the plugin. >>> >>> Ideally, what I would like to be able to do is launch pymol once, then open >>> my plugin. Then if I make some changes to the code in the appropriate >>> folder, if I simply close the tk window and open the plugin from the menu >>> again, it would reopen the plugin with the new changes. >>> >>> Short of that, running some commands in the command line window would also >>> be acceptable. I tried using the execfile command you suggested, but that >>> doesn't seem to do what I want. Did I do something wrong? >>> >>> Thanks again for your help, >>> Matt >>> >>> On 07/18/2014 01:23 PM, Andreas Warnecke wrote: >>>> Hej Matthew, >>>> >>>> 1. The advantage of using the plugin manager is that it will automatically >>>> import all the plugin in the 'plugins' folder of the 'pymol-script-repo'. >>>> This should re-load you plugin if it is located in a folder managed by the >>>> plugin manager. The loading of plugins located therein occurs >>>> automatically. >>>> You can add paths to the plugin manager either manually or using scripts >>>> during startup as described in the link. This is the way I prefer to do >>>> it. Check the examples and linked pages: >>>> http://www.pymolwiki.org/index.php/Plugin_manager >>>> >>>> Note that deliberate import of these plugins changes: >>>> e.g. to import colorama.py post startup use: >>>> import pmg_tk.startup.colorama >>>> # this is shown in the info dialog of the Plugin manager >>>> >>>> A simple restart of PyMOL should re-load your updated plugin with the >>>> changes made, provided the path is added to its list. It may require a >>>> __init__.py file if it is a module. >>>> >>>> 2. if you are testing a plugin you can always have it in a separate folder >>>> that you add yourself. >>>> I sometime use the following to test scripts (added in the >>>> run_on_startup.py): >>>> ######################### >>>> import sys >>>> import os >>>> sys.path.append(os.path.abspath(os.path.join(os.environ['PYMOL_PATH'], >>>> 'plugins_private'))) # contains a folder called private with a (empty) >>>> __init__.py file >>>> import private >>>> ######################### >>>> >>>> 3. Another (maybe deprecated?) way of running your code would be to use >>>> 'execfile'. This would correspond to running the python code in PyMOL. >>>> >>>> ######################### >>>> import os >>>> PYMOLPATH=os.environ['PYMOL_PATH'] >>>> #Append 'plugin' folder # Change to 'Pymol-script-repo' if required >>>> PLUGINPATH=os.path.realpath(os.path.join(PYMOLPATH, 'plugins')) >>>> >>>> # Run every script in the folder and max. one sub-folder that is '.py' >>>> PLUGINPATH_LIST=[os.path.realpath(os.path.join(PLUGINPATH, name)) for name >>>> in os.listdir(PLUGINPATH) if os.path.isdir(os.path.join(PLUGINPATH, name))] >>>> PLUGINPATH_LIST=[PLUGINPATH]+PLUGINPATH_LIST >>>> print 'paths for plugins: ' >>>> for p in PLUGINPATH_LIST: print p >>>> print >>>> '#-------------------------------------------------------------------------------' >>>> for d in PLUGINPATH_LIST: >>>> print 'Initiating (sub)-directory: '+d >>>> for f in os.listdir(d): >>>> if f=='__init__.py': continue >>>> if f.endswith('.py'): >>>> print "Executing plugin: "+f >>>> execfile(os.path.realpath(os.path.join(d, f))) >>>> else: >>>> if not os.path.isdir(os.path.join(d,f)):print 'skipping non >>>> .py file: '+f >>>> ######################### >>>> >>>> The drawback in 2 or 3 is that this will not work for true plugins that >>>> add menus to PyMOL. >>>> >>>> 4. For simple script or short chunks of code I often copy-paste: >>>> python >>>> #code here >>>> python end >>>> >>>> into the pymol mini shell. This is great for testing part of the code. >>>> >>>> In conclusion I recommend using option. 1 and restart PyMOL after making >>>> changes to the script: The plugin manager is a very practical addition to >>>> PyMOL and I love it. It just needs to be configured correctly, which is >>>> something that changed in comparison to other PyMOL versions (cf. the >>>> link). >>>> Just beware: removing a installed plugin may physically delete the file. >>>> So be sure to backup your script should you decide to remove scripts or >>>> paths that were added to the Plugin Manager. >>>> >>>> Hope this will relieve some of the frustration. >>>> >>>> Cheers, >>>> >>>> Andreas >>>> >>>> >>>> On Fri, Jul 18, 2014 at 5:41 PM, Matthew Baumgartner <mp...@pitt.edu> >>>> wrote: >>>> Hi, >>>> So i am working on a pymol plugin (shameless plug) and I have been annoyed >>>> how difficult it is to reinstall my plugin so I can see the effect of the >>>> changes I have made. >>>> >>>> Currently, the process is: >>>> Plugin Menu > Plugin Manager > Install New Plugin tab > Choose File... > >>>> Navigate to script file (could be 5-8 clicks plus some scrolling) > Select >>>> plugin directory > Ok > Hit Ok to confirm reinstall > Hit OK to >>>> acknowledge the reinstall > Close the Plugin Manager > Go to the Plugin >>>> Menu > Open my Plugin at the bottom. >>>> >>>> It's a super long process that really hampers rapid development, which is >>>> super annoying when trying to tweak GUI elements. >>>> >>>> So to my question, is there a faster method for getting the plugin to use >>>> the new code? I am open to basically any solution. >>>> In my frustration, I've looked into reverse engineering the Plugin Manager >>>> and making my own little script. But I figured I should ask here before >>>> doing this. >>>> >>>> Thanks, >>>> Matt >>>> >>>> >>>> I'm using Pymol 1.7.1.7 and Ubuntu 13.10. -- Thomas Holder PyMOL Developer Schrödinger, Inc. ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ PyMOL-users mailing list (PyMOL-users@lists.sourceforge.net) Info Page: https://lists.sourceforge.net/lists/listinfo/pymol-users Archives: http://www.mail-archive.com/pymol-users@lists.sourceforge.net