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

后端 未结 7 1952
失恋的感觉
失恋的感觉 2021-01-31 17:35

I would like to install the modules \'mutagen\' and \'gTTS\' for my code, but I want to have it so it will install the modules on every computer that doesn\'t have them, but it

相关标签:
7条回答
  • 2021-01-31 17:45

    If you want to know if a package installed, you can check it in your terminal using the next 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>
    

    find the keyword from the list.

    Example:

    pip list| grep quant
    

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

    0 讨论(0)
  • 2021-01-31 17:48

    You can use the command line :

    python -m MyModule
    

    it will say if the module exists

    Else you can simply use the best practice :

    pip freeze > requirements.txt

    That will put the modules you've on you python installation in a file

    and :

    pip install -r requirements.txt

    to load them

    It will automatically you purposes

    Have fun

    0 讨论(0)
  • 2021-01-31 17:49

    You can check if a package is installed using pkg_resources.get_distribution:

    import pkg_resources
    
    for package in ['mutagen', 'gTTS']:
        try:
            dist = pkg_resources.get_distribution(package)
            print('{} ({}) is installed'.format(dist.key, dist.version))
        except pkg_resources.DistributionNotFound:
            print('{} is NOT installed'.format(package))
    

    Note: You should not be directly importing the pip module as it is an unsupported use-case of the pip command.

    The recommended way of using pip from your program is to execute it using subprocess:

    subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'my_package'])
    
    0 讨论(0)
  • 2021-01-31 17:49

    If you would like to preview if a specific package (or some) are installed or not maybe you can use the idle in python. Specifically :

    1. Open IDLE
    2. Browse to File > Open Module > Some Module
    3. IDLE will either display the module or will prompt an error message.

    Above is tested with python 3.9.0

    0 讨论(0)
  • 2021-01-31 17:52

    EDIT - 2020/02/03

    The pip module has updated quite a lot since the time I posted this answer. I've 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.

    0 讨论(0)
  • 2021-01-31 17:54

    you can use try/except:

    try:
        import time
        print("module 'time' is installed")
    except ModuleNotFoundError:
        print("module 'time' is not installed")
        # or
        install("time") # the install function from the question
    
    
    0 讨论(0)
提交回复
热议问题