web-dev-qa-db-fra.com

Comment vérifier si un module est installé dans Python et, sinon, l'installer dans le code?

Je voudrais installer les modules "mutagen" et "gTTS" pour mon code, mais je veux l'avoir pour qu'il installe les modules sur chaque ordinateur qui n'en a pas, mais il n'essaiera pas de les installer si ils sont déjà installés. J'ai actuellement:

def install(package):
    pip.main(['install', package])

install('mutagen')

install('gTTS')

from gtts import gTTS
from mutagen.mp3 import MP3

Cependant, si vous avez déjà les modules, cela ne fera qu'ajouter un encombrement inutile au démarrage du programme chaque fois que vous l'ouvrirez.

9
Gameskiller01

Pour vérifier si le package existe ou non et l'installer dans ce dernier cas, essayez d'utiliser le module pip.

Pour masquer la sortie, vous devez créer une fonction pour celle-ci (à partir du code dans ce post ):

from contextlib import contextmanager
import sys, os

@contextmanager
def suppress_stdout():
    with open(os.devnull, "w") as devnull:
        old_stdout = sys.stdout
        sys.stdout = devnull
        try:  
            yield
        finally:
            sys.stdout = old_stdout

import pip

required_pkgs = ['mutagen', 'gTTS']
installed_pkgs = [pkg.key for pkg in pip.get_installed_distributions()]

for package in required_pkgs:
    if package not in installed_pkgs:
        with suppress_stdout():
            pip.main(['install', package])

Ou une autre façon de procéder est d'utiliser un simple tryexcept:

import pip

pkgs = ['mutagen', 'gTTS']
for package in pkgs:
    try:
        import package
    except ImportError, e:
        pip.main(['install', package])

Comme @zwer l'a mentionné, ce qui précède fonctionne, bien qu'il ne soit pas considéré comme un bon moyen de conditionner votre projet. Pour regarder cela plus en profondeur, lisez la page Comment empaqueter une Python App .

11
theGirrafish

Une autre solution consiste à mettre une instruction d'importation pour tout ce que vous essayez d'importer dans un bloc try/except, donc si cela fonctionne, il est installé, mais sinon, il lèvera l'exception et vous pouvez exécuter la commande pour l'installer.

2
Joseph Long

Vous pouvez utiliser la ligne de commande:

python -m MyModule

il dira si le module existe

Sinon, vous pouvez simplement utiliser la meilleure pratique:

gel de pip> requirements.txt

Cela mettra les modules que vous avez sur vous python installation dans un fichier

et :

pip install -r requirements.txt

pour les charger

Il vous servira automatiquement

S'amuser

1
D. Peter
pip list | grep <module_name_you_want_to_check>

Ci-dessus est la réponse, où:

pip list

répertorier tous les modules, et

grep <module_name_you_want_to_check>

trouver le mot-clé dans la liste. Travaille pour moi.

0
jack