1

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

例如:

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

3 回答 3

5

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

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

如果您真的必须这样做,我的建议是保留标准库模块名称的列表并这样做 - 这不是一个很好的解决方案,但它可能比任何替代方案都更稳定。

于 2012-10-12T07:50:17.940 回答
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'
于 2012-10-12T07:55:17.057 回答
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
于 2016-04-24T02:38:36.503 回答