Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for optional_import, version 1.2
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

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page