diff --git a/skimage/io/__init__.py b/skimage/io/__init__.py index 8e47076f..e079533e 100644 --- a/skimage/io/__init__.py +++ b/skimage/io/__init__.py @@ -8,22 +8,6 @@ from ._plugins import use as use_plugin from ._plugins import available as plugins from ._plugins import info as plugin_info from ._plugins import configuration as plugin_order -available_plugins = plugins() - -for preferred_plugin in ['matplotlib', 'pil', 'qt', 'freeimage', 'null']: - if preferred_plugin in available_plugins: - try: - use_plugin(preferred_plugin) - break - except ImportError: - pass - -# Use PIL as the default imread plugin, since matplotlib (1.2.x) -# is buggy (flips PNGs around, returns bytes as floats, etc.) -try: - use_plugin('pil', 'imread') -except ImportError: - pass from .sift import * from .collection import * @@ -32,6 +16,31 @@ from ._io import * from .video import * +available_plugins = plugins() + + +def _load_preferred_plugins(): + # Load preferred plugin for each io function. + # ('imread' must be last because the list gets modified on last iteration.) + io_funcs = ['imsave', 'imshow', 'imread_collection', 'imread'] + preferred_plugins = ['matplotlib', 'pil', 'qt', 'freeimage', 'null'] + for func in io_funcs: + if func == 'imread': + # Use PIL as the default imread plugin, since matplotlib (1.2.x) + # is buggy (flips PNGs around, returns bytes as floats, etc.) + preferred_plugins.remove('pil') + preferred_plugins.insert(0, 'pil') + for plugin in preferred_plugins: + if plugin not in available_plugins: + continue + try: + use_plugin(plugin, kind=func) + break + except (ImportError, RuntimeError): + pass +_load_preferred_plugins() + + def _update_doc(doc): """Add a list of plugins to the module docstring, formatted as a ReStructuredText table.