Difference between revisions of "Plugindirectory"

From PyMOLWiki
Jump to: navigation, search
(Is being used in the Pymol-script-repo project)
(Example of use)
Line 70: Line 70:
  
 
== Example of use ==
 
== Example of use ==
If you have '''Pymol-script-repo''' added to your path. [http://www.pymolwiki.org/index.php/Git_install#Adding_Pymol-script-repo_to_PyMOL_search_path See here how to.]
+
If you have '''Pymol-script-repo''' added to your path, you don't have to do anything. [http://www.pymolwiki.org/index.php/Git_install#Adding_Pymol-script-repo_to_PyMOL_search_path See here how to do this.]
  
 +
Then in PyMOL write
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
import plugins
 
import plugins

Revision as of 11:03, 3 December 2011

This page describes how to set up a personal plugin directory. It supports single python files as well as directories which contain a __init__.py file.

1) Create a directory $HOME/.pymol/pymolplugins, this will be your personal plugin directory. Copy plugins here instead of using the "Plugin > Manage Plugins > Install..." menu.

2) Create a file $HOME/.pymol/pymolplugins/__init__.py with the folling content:

'''
PyMOL personal plugin directory
Recommended location of this file: ~/.pymol/pymolplugins/__init__.py
'''

import os, sys, traceback

# import pymolplugins (allow different name)
pymolplugins = sys.modules[__name__]

import pmg_tk.PMGApp
x__initializePlugins = pmg_tk.PMGApp.initializePlugins

def initializePlugins(self):
    '''
    Overloaded version of pmg_tk.PMGApp.initializePlugins
    See pmg_tk/PMGApp.py
    '''
    # load global plugins
    x__initializePlugins(self)

    # load user plugins
    modules = set()
    for path in pymolplugins.__path__:
        for filename in os.listdir(path):
            name, _, ext = filename.partition('.')
            if ext not in ['py', 'pyc', 'pyo']:
                if os.path.isdir(os.path.join(path, filename)):
                    modules.add(filename)
            elif name != '__init__':
                modules.add(name)
    for name in modules:
        mod_name = pymolplugins.__name__ + '.' + name
        try:
            __import__(mod_name, level=0)
            mod = sys.modules[mod_name]
            if hasattr(mod,'__init_plugin__'):
                mod.__init_plugin__(self)
            elif hasattr(mod,'__init__'):
                mod.__init__(self)
        except:
            print "Exception in plugin '%s' -- Traceback follows..."%name
            traceback.print_exc()
            print "Error: unable to initialize plugin '%s'."%name

# overload method
pmg_tk.PMGApp.initializePlugins = initializePlugins

3) We need to import pymolplugins before the GUI launches, so insert into your $HOME/.pymolrc file:

python
import sys, os
sys.path.append(os.path.expanduser('~/.pymol'))
import pymolplugins
python end

= This script is used in

This plugin is being used in the Pymol-script-repo project

Example of use

If you have Pymol-script-repo added to your path, you don't have to do anything. See here how to do this.

Then in PyMOL write

import plugins
help(plugins)

Python Code

This code has been put under version control. In the project, Pymol-script-repo.

For a color coded view:

https://github.com/Pymol-Scripts/Pymol-script-repo/blob/master/__init__.py