<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def initialise_by_names(self, plugins=None):
 """ Initialises given plugins, but does not activate them. This is needed to import and configure libraries, which are imported by used patterns, like GwFlask. After this action, all needed python modules are imported and configured. Also the groundwork application object is ready and contains functions and objects, which were added by patterns, like app.commands from GwCommandsPattern. The class of a given plugin must already be registered in the :class:`.PluginClassManager`. :param plugins: List of plugin names :type plugins: list of strings """


        if plugins is None:
            plugins = []

        self._log.debug("Plugins Initialisation started")
        if not isinstance(plugins, list):
            raise AttributeError("plugins must be a list, not %s" % type(plugins))

        self._log.debug("Plugins to initialise: %s" % ", ".join(plugins))
        plugin_initialised = []
        for plugin_name in plugins:
            if not isinstance(plugin_name, str):
                raise AttributeError("plugin name must be a str, not %s" % type(plugin_name))

            plugin_class = self.classes.get(plugin_name)
            self.initialise(plugin_class.clazz, plugin_name)
            plugin_initialised.append(plugin_name)

        self._log.info("Plugins initialised: %s" % ", ".join(plugin_initialised))