How to check if a module is installed in Python and, if not, install it within the code?

How to check if a module is installed in Python and, if not, install it within the code?

EDIT – 2020/02/03

The pip module has updated quite a lot since the time I posted this answer. Ive updated the snippet with the proper way to install a missing dependency, which is to use subprocess and pkg_resources, and not pip.

To hide the output, you can redirect the subprocess output to devnull:

import sys
import subprocess
import pkg_resources

required = {mutagen, gTTS}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = required - installed

if missing:
    python = sys.executable
    subprocess.check_call([python, -m, pip, install, *missing], stdout=subprocess.DEVNULL)

Like @zwer mentioned, the above works, although it is not seen as a proper way of packaging your project. To look at this in better depth, read the the page How to package a Python App.

you can use simple try/except:

try:
    import mutagen
    print(module mutagen is installed)
except ModuleNotFoundError:
    print(module mutagen is not installed)
    # or
    install(mutagen) # the install function from the question

How to check if a module is installed in Python and, if not, install it within the code?

If you want to know if a package is installed, you can check it in your terminal using the following command:

pip list | grep <module_name_you_want_to_check>

How this works:

pip list

lists all modules installed in your Python.

The vertical bar | is commonly referred to as a pipe. It is used to pipe one command into another. That is, it directs the output from the first command into the input for the second command.

grep <module_name_you_want_to_check>

finds the keyword from the list.

Example:

pip list| grep quant

Lists all packages which start with quant (for example quantstrats). If you do not have any output, this means the library is not installed.

Leave a Reply

Your email address will not be published. Required fields are marked *