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.
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 try
except
:
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 .
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.
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
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.