Import something if it exists.
Project description
Usage
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.