【问题标题】:Detecting Missing Modules Dynamically (Python)动态检测缺失的模块(Python)
【发布时间】:2016-08-10 14:01:42
【问题描述】:

在处理更大的项目时,我非常热衷于错误检测和处理。我正在使用用户可能安装或未安装的一些模块,因此我需要考虑这种可能性。

我想知道一种在尝试导入模块时检测缺少哪些模块的方法。目前,我有一组 try/except 块监视 ImportErrors 并将产生错误的模块的名称附加到列表中。

当前代码:

errors = []
try:
    import socket
except ImportError:
    errors.append('socket')
    pass
try:
    import shutil
except ImportError:
    errors.append('shutil')
try:
    import urllib
except ImportError:
    errors.append('urllib')
    pass
if len(errors) > 0:
    print colors.red + '[!] ' + colors.end + 'Error: The Following Module(s) Encountered Error(s): \n'
    for i in range(len(errors)):
        print '\t' + errors[i]
    print colors.blue + '\n[*] ' + colors.end + 'Please Install/Reinstall the Listed Modules'
    quit()

这种方法似乎工作得很好,但我想要一种占用更少整体空间的方法。使用这种multi-try/except块方法的主要原因是我需要检测哪个模块导入有问题。

【问题讨论】:

  • 为什么不使用proper packaging,让pip 负责安装依赖项?这样您就可以将依赖管理的责任移出,而不必担心如何处理错误。

标签: python module error-detection


【解决方案1】:
import importlib

moduleNames = ['socket', 'shutil', 'urllib']

missingModuleNames = []

for moduleName in moduleNames:
    try:
        importlib.import_module (moduleName)
    except:
        missingModuleNames.append (moduleName)

print (missingModuleNames)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2021-09-19
    • 2014-12-27
    • 2010-10-20
    • 2010-10-31
    • 2017-08-24
    相关资源
    最近更新 更多