Import something if it exists.
This library contains only the context manager optional_import:
>>> from optional_import import optional_import
A successful import works as usual:
>>> with optional_import(): ... import collections >>> type(collections) <type 'module'>
If the import does not exist, optional_import suppresses the ImportError that would otherwise be raised.
>>> import unicorns Traceback (most recent call last): ... ImportError: No module named unicorns >>> with optional_import(): ... import unicorns >>> unicorns Traceback (most recent call last): ... NameError: name 'unicorns' is not defined
Example: Django local settings
A common pattern in Django is to put default settings in settings.py, put optional site-specific settings in settings_local.py, and import * from the local settings file if it exists.
with optional_import(): from .settings_local import *
Why not just catch ImportError?
Optional imports can almost be achieved simply by catching ImportError:
try: import foo except ImportError: pass
But this approach introduces a problem: If foo exists but raises ImportError, we want that error to be raised, but instead it is swallowed by the except clause.
With optional_import, the error is raised as desired. In the following example, the bad module tries to import a nonexistent package unicorns:
>>> with optional_import(): ... import bad Traceback (most recent call last): ... ImportError: No module named unicorns
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size optional_import-1.2.tar.gz (2.4 kB)||File type Source||Python version None||Upload date||Hashes View hashes|