Load plugins in `sys.path` and :attr:`plugin_dirs`

        Parameters
        ----------
        plugin_dirs : list or tuple of string, optional
            A list or tuple of plugin directory path
        quiet : bool, optional
            If True, print all error message

def load_plugins(self, plugin_dirs=None, quiet=True):
        """
        Load plugins in `sys.path` and :attr:`plugin_dirs`

        Parameters
        ----------
        plugin_dirs : list or tuple of string, optional
            A list or tuple of plugin directory path
        quiet : bool, optional
            If True, print all error message

        """
        from pkg_resources import working_set
        from pkg_resources import iter_entry_points
        from pkg_resources import Environment

        if plugin_dirs is None:
            plugin_dirs = []
            plugin_dirs.append(environment.get_system_plugins_directory())
            plugin_dirs.append(environment.get_user_plugins_directory())

        distributions, errors = working_set.find_plugins(
                Environment(plugin_dirs)
            )
        map(working_set.add, distributions)

        if not quiet:
            # display error info
            for distribution, error in errors:
                print distrubution, error

        for entry_point in iter_entry_points(self.ENTRY_POINT):
            # load entry point
            plugin = entry_point.load()
            # if plugin is callable and `manually` is True, initialize manually
            if callable(plugin) and getattr(plugin, 'manually', False):
                # manually initialize plugin
                plugin(self)
            else:
                # automatically initialize plugin
                self.register(entry_point.name, plugin)