【发布时间】:2016-11-16 04:05:09
【问题描述】:
我希望在导入特定模块时运行一些回调。例如(使用一个实际上并不存在的假 @imp.when_imported 函数):
@imp.when_imported('numpy')
def set_linewidth(numpy):
import shutil
numpy.set_printoptions(linewidth=shutil.get_terminal_size()[0])
此功能是在PEP 369: Post import hooks 中设计的,但由于以下原因被撤回:
此 PEP 已被其作者撤回,因为在 Python 3.3 中迁移到 importlib 后,大部分详细设计不再有效。
但是importlib 没有明确的解决方案。如何使用importlib 实现导入后挂钩?
【问题讨论】:
-
你能在模块的最后添加代码吗?
-
不,我想为我不拥有的模块执行此操作(尤其是numpy)。
-
必须在导入之后还是在主代码之前?
-
如果您提供的模块中有
on_import钩子,您不妨导入 numpy 并立即运行该函数(因为模块在整个解释器中是全局的)。另一个考虑因素是,这个“功能”对您提供的模块的用户来说是隐含的和隐藏的,他们可能不希望这样做。 -
没有
on_import钩子——这就是我要问的。而且我不想总是导入 numpy,因为它很慢或者可能不可用。
标签: python python-3.x python-import