webentwicklung-frage-antwort-db.com.de

Wie überprüfe ich, ob ein Modul in Python) installiert ist, und wenn nicht, installiere ich es im Code?

Ich möchte die Module 'mutagen' und 'gTTS' für meinen Code installieren, aber ich möchte sie haben, damit die Module auf jedem Computer installiert werden, auf dem sie nicht vorhanden sind, aber es wird nicht versucht, sie zu installieren, wenn Sie sind bereits installiert. Ich habe derzeit:

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

install('mutagen')

install('gTTS')

from gtts import gTTS
from mutagen.mp3 import MP3

Wenn Sie jedoch bereits über die Module verfügen, wird der Start des Programms beim Öffnen nur unnötig übersichtlich.

9
Gameskiller01

Verwenden Sie das Modul pip, um zu überprüfen, ob das Paket vorhanden ist oder nicht, und installieren Sie es in letzterem Fall.

Um die Ausgabe auszublenden, müssten Sie eine Funktion dafür erstellen (aus dem Code in diesem 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])

Oder ein anderer Weg, dies zu tun, ist mit einem einfachen tryexcept:

import pip

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

Wie von @zwer erwähnt, funktioniert das oben Genannte, obwohl es nicht als eine geeignete Methode zum Packen Ihres Projekts angesehen wird. Lesen Sie die Seite So verpacken Sie eine Python App .

11
theGirrafish

Eine andere Lösung besteht darin, eine import-Anweisung für alles, was Sie importieren möchten, in einen try/except-Block zu setzen. Wenn dies funktioniert, wird sie installiert. Wenn dies nicht der Fall ist, wird die Ausnahme ausgelöst, und Sie können den Befehl ausführen, um sie zu installieren.

2
Joseph Long

Sie können die Befehlszeile verwenden:

python -m MyModule

es wird angezeigt, ob das Modul vorhanden ist

Ansonsten können Sie einfach die Best Practice anwenden:

pip freeze> requirements.txt

Dadurch werden die Module, die Sie auf Ihrer python -Installation installiert haben, in eine Datei eingefügt

und :

pip install -r requirements.txt

um sie zu laden

Es werden automatisch Sie Zwecke

Habe Spaß

1
D. Peter
pip list | grep <module_name_you_want_to_check>

Oben ist die Antwort, wo:

pip list

liste alle Module auf, und

grep <module_name_you_want_to_check>

suchen Sie das Schlüsselwort aus der Liste. Funktioniert bei mir.

0
jack