是否有可能验证导入是否来自标准库?
例如:
from math import sin #from the standard library.
from my_module import MyClass #not from the standard library.
是否有可能验证导入是否来自标准库?
例如:
from math import sin #from the standard library.
from my_module import MyClass #not from the standard library.
没有简单的方法可以做到这一点,因为 Python 标准库没有以特殊的方式实现 - 对于 Python,标准库和其他模块之间没有区别。
充其量,您可以使用该inspect
模块尝试查找一些指标,例如,使用inspect.getsourcefile()
查找源文件所在的位置,然后使用它来检查它是否是核心库。然而,这不会特别好,因为 C 中的任何模块都会返回 TypeError,因为它们是内置的 - 但你不能假设它们来自标准库,因为任何 C 扩展模块都会做同样的事情。
如果您真的必须这样做,我的建议是保留标准库模块名称的列表并这样做 - 这不是一个很好的解决方案,但它可能比任何替代方案都更稳定。
如果您将自己的模块保存在特定目录中,则可以查看模块的__file__
属性:
>>> import os
>>> os.__file__
'/usr/lib64/python2.6/os.pyc'
>>> import my_module
>>> my_module.__file__
'/path/to/my_packages/.../my_module.pyc'
下面的源代码会告诉你一个模块是否是标准的 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