Search code examples
pythonpackageskypepython-import

Check if Python Package is installed


What's a good way to check if a package is installed while within a Python script? I know it's easy from the interpreter, but I need to do it within a script.

I guess I could check if there's a directory on the system that's created during the installation, but I feel like there's a better way. I'm trying to make sure the Skype4Py package is installed, and if not I'll install it.

My ideas for accomplishing the check

  • check for a directory in the typical install path
  • try to import the package and if an exception is throw, then install package

Solution

  • If you mean a python script, just do something like this:

    Python 3.3+ use sys.modules and find_spec:

    import importlib.util
    import sys
    
    # For illustrative purposes.
    name = 'itertools'
    
    if name in sys.modules:
        print(f"{name!r} already in sys.modules")
    elif (spec := importlib.util.find_spec(name)) is not None:
        # If you choose to perform the actual import ...
        module = importlib.util.module_from_spec(spec)
        sys.modules[name] = module
        spec.loader.exec_module(module)
        print(f"{name!r} has been imported")
    else:
        print(f"can't find the {name!r} module")
    

    Python 3:

    try:
        import mymodule
    except ImportError as e:
        pass  # module doesn't exist, deal with it.
    

    Python 2:

    try:
        import mymodule
    except ImportError, e:
        pass  # module doesn't exist, deal with it.