原始想法是突破python对顶层包的限制,从而允许在当前目录或父目录使用相对位置加载模块。
方法发现自 pycharm 的python挂钩代码 pydev_import_hook.py
该文件可以在pycharm的 PyCharm\plugins\python-ce\helpers\pydev_pydev_bundle 目录中找到
原理,修改 builtins.import 函数即可实现目的
本修改对整个python程序生效
下面是一个例子,阻止 collections 模块加载
import builtins
ori_import = builtins.__import__
def my_import(name, globals=None, locals=None, fromlist=(), level=0):
if name == 'collections':
print('不允许加载 collections 模块', flush=True)
raise ImportError()
else:
print(f'即将加载 {name} 模块', flush=True)
r = ori_import(name, globals, locals, fromlist, level)
print(f'成功加载 {name} 模块', flush=True)
return r
builtins.__import__ = my_import
# 加载 typing 模块,将会成功
import typing
# 加载collections模块,将会失败
import collections
参考:
https://www.programcreek.com/python/example/58937/builtins.import