除了一些明确指定的方法之外,现有 Python 模块中的import
所有内容 ( )是否可行?*
(背景:针对推荐的 Python 实践,在FEniCS中很常见from dolfin import *
。一些方法名称包含字符串“Test”(例如,TestFunction()
),并且被鼻子误认为是单元测试。)
如果您无权访问该模块,您也可以简单地从全局命名空间中删除这些方法或变量。这是如何做到的:
to_exclude = ['foo']
from somemodule import *
for name in to_exclude:
del globals()[name]
是的,您可以定义__all__
模块
添加
__all__ = ["echo", "surround", "reverse"] #Or whatever your module names are
到具有这些模块的文件,或__init__.py
您要从中导入的包的文件。
现在
from module import *
仅导入指定的模块__all__
@alexander-zhukov 的解决方案在大多数情况下都可以工作,但当导入的模块巧合地包含一个名为globals
.
例如,
to_exclude = ['abort']
from flask import *
for name in to_exclude:
del globals()[name]
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: 'module' object is not callable
该错误是因为该flask
包包含一个名为globals
(无法调用)的命名空间,它将覆盖您当前的全局符号globals
。
以下解决方案适用于烧瓶和其他:
to_exclude = ['abort']
from flask import *
for name in to_exclude:
__builtins__.globals().pop(name)
然而可笑的是,如果您打开 Python 控制台并手动输入命令,它就不起作用。我认为这是 Python 3 的一个缺陷。如果您希望它在 Python 控制台中工作,那么您必须显式导入builtins
模块:
import builtins
to_exclude = ['abort']
from flask import *
for name in to_exclude:
builtins.globals().pop(name)