Python:如何检查导入的模块/包/类是否来自标准库

时间:2012-10-12 07:43:14

标签: python

是否有可能验证导入是否来自标准库?

例如:

from math import sin #from the standard library.
from my_module import MyClass #not from the standard library.

3 个答案:

答案 0 :(得分:5)

没有简单的方法可以做到这一点,因为Python标准库没有以特殊的方式实现 - 对于Python,标准库和其他模块之间没有区别。

充其量,您可以使用the inspect module尝试找到一些指标,例如,使用inspect.getsourcefile()查找源文件所在的位置,然后使用它来检查它是否是核心库。但是,这不会特别好用,因为C中的任何模块都会返回一个TypeError,因为它们是内置的 - 但你不能认为它们来自标准库,因为任何C扩展模块都会做同样的事情。

如果你真的必须这样做,我的建议是保留标准库模块名称列表并按照这种方式执行 - 这不是一个很好的解决方案,但它可能更稳定比任何其他选择。

答案 1 :(得分:0)

如果您将自己的模块保存在特定目录中,则可以查看模块的__file__属性:

>>> import os
>>> os.__file__
'/usr/lib64/python2.6/os.pyc'

>>> import my_module
>>> my_module.__file__
'/path/to/my_packages/.../my_module.pyc'

答案 2 :(得分:0)

下面的源代码将告诉您模块是否是标准Python模块

def is_standard_module(module_name):
    if module_name in sys.builtin_module_names:
        return True
    installation_path = None
    try:
        installation_path = importlib.import_module(module_name).__file__
    except ImportError:
        return False
    linux_os, _, _ = platform.linux_distribution()
    return "dist-packages" not in installation_path if linux_os == "Ubuntu" else "site-packages" not in installation_path