如何在导入过程中忽略python模块?

2024-10-01 09:25:09 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python应用程序的构建过程中,我需要忽略一些导入(因为这些模块是由构建过程创建的)。这个问题我解决不了。 所以我想我可以用import钩子这样做:

class ImportBlocker(object):
    def __init__(self, *args):
        self.module_names = args

    def find_module(self, fullname, path=None):
        if fullname in self.module_names:
            return self
        return None

    def load_module(self, name):
        raise ImportError("%s is blocked and cannot be imported" % name)

import sys
sys.meta_path = [ImportBlocker('chickenlib')]

但是因为我产生了一个错误,构建过程停止了——我只想默默地忽略导入。。。返回“None”也不起作用。 有办法吗?在


Tags: pathnameimportselfnone应用程序returnnames
2条回答

参考“静默忽略导入”,您可以尝试以下操作:

def TryImport(module_name):
    try:
        import module_name
    except:
        pass #or anything to log

如果您正在使用python3.4或更高版本,您可以通过稍微修改示例来“静默地忽略”导入,以实现一个将创建空的模块的exec_module。在

class ImportBlocker(object):
    def __init__(self, *args):
        self.module_names = args

    def find_module(self, fullname, path=None):
        if fullname in self.module_names:
            return self
        return None

    def exec_module(self, mdl):
        # return an empty namespace
        return {}

现在:

^{pr2}$

相关问题 更多 >