Тестовая установка нескольких пакетов - PullRequest
0 голосов
/ 02 июля 2019

В рамках режима тестирования для создания приложения на Python [в данном случае ноутбука Jupyter] я хочу проверить, что все модули, установленные в системе, будут фактически загружаться.

importмодуль из строковой переменной указал мне на создание следующего кода:

    import re
    import subprocess

    s_counter = 0
    f_counter = 0
    errors = []
    libraries = []

    output =  subprocess.run(['conda', 'list'], stdout=subprocess.PIPE).stdout.decode('utf-8').splitlines()
    for line in output:
        if not re.match('\s*#', line):
            words = re.split('\s+', line)
            if words[0] != 'python':
                libraries.append(words[0])
    for lib in libraries:
        try:
            lib_obj = __import__(lib)
            globals()[lib] = lib_obj
            s_counter += 1
        except ImportError:
            errors.append("ERROR: missing python library: " + lib)
            f_counter += 1
    print(f"Successfuly loaded {s_counter} libraries, failed to load {f_counter}")
    print(f"{errors}")

Проблема с этим упрощенным решением состоит в том, что предполагается, что имя модуля совпадает с import имя .... и часто это не так.

Например: .... install beautifulsoup4 и from bs4 import BeautifulSoup

Итак, вопрос в том, как мне найти строку importдля модуля ... программно ?

...