python - 从模块导入 Python 类,但不导入依赖项

标签 python python-module

如何导入 python 类但避免在该模块中运行 import 语句?

Module foo
    from bar import A

Module bar
    import alpha

    class A(object):
        ...

    class B(objects):
        ...

我想导入 A 类,但不需要 B 类。B 类需要模块栏中的导入语句,但如果可能的话,我想避免需要安装该依赖项,因为(我假设)它将被加载到内存中但不会被使用。

如有任何帮助,我们将不胜感激。

最佳答案

如果不修改其源代码,您就无法阻止 bar 导入 alpha。但是您可以通过将 alpha 写入 sys.modules 来“伪造”它:

>>> import alpha
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named alpha
>>> import sys; sys.modules['alpha'] = object()
>>> import alpha
>>>

这是可行的,因为 Python 将导入的模块缓存在 sys.modules 中,因此,如果您导入某些内容两次,则不必在第二次执行所有艰苦的工作。添加 alpha 意味着 Python 认为您已经导入了 alpha,因此当 bar 尝试这样做时,它只会取回缓存的副本.

显然,您应该仔细考虑是否愿意这样做 - 如果 bar 在任何地方实际使用 alpha,它就会以意想不到的方式崩溃。

关于python - 从模块导入 Python 类,但不导入依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10330588/

相关文章:

python - 我可以在 python 中集成多个列表吗?

python - 为什么这个while循环在if语句下不执行?

python - 如何使用 fields.function?

python - paramiko python 模块卡在 stdout.read()

python - 处理 python 子模块的导入

python-2.7 - 什么库能够在Python中提取SIFT特征?

python - 为多个 python 版本安装模块

python - 使用 docxTemplate python 跨列

python - 根据类别过滤帖子

Python从更高级别的包导入模块