В рамках режима тестирования для создания приложения на 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
для модуля ... программно ?