当导入特定模块时执行代码
项目描述
Importhook
importhook
是一个Python包,它允许您在导入特定模块时配置要调用的函数。
安装
pip install importhook
用法
配置一个钩子,在导入 socket
模块时调用。
import importhook
# Setup hook to be called any time the `socket` module is imported and loaded into module cache
@importhook.on_import('socket')
def on_socket_import(socket):
print('"socket" module has been imported')
# Import module
import socket
您还可以使用 importhook
通过从您的钩子函数返回Python模块来拦截并修改导入时的模块。
import importhook
# Setup hook to be called any time the `socket` module is imported and loaded into module cache
@importhook.on_import('socket')
def on_socket_import(socket):
new_socket = importhook.copy_module(socket)
setattr(new_socket, 'gethostname', lambda: 'patched-hostname')
return new_socket
# Import module
import socket
# Prints: 'patched-hostname'
print(socket.gethostname())
importhook
还附带了一些帮助程序,用于重新加载已导入的模块。
import socket
import importhook
# Setup hook to be called any time the `socket` module is imported and loaded into module cache
# DEV: `on_socket_import` will be called immediately because the `socket` module is already loaded
@importhook.on_import('socket')
def on_socket_import(socket):
print('"socket" module has been imported')
# Reload the socket module
# DEV: Reassign to `socket` in case one of our hooks modifies the module
socket = importhook.reload_module(socket)
设计决策
覆盖 sys.meta_path
如果Python开发者想要修改导入行为,他们可以通过将新的 importlib.abc.Finder
类添加到 sys.meta_path
来实现。
import sys
# Add our custom `importlib.abc.Finder` to `sys.meta_path`
sys.meta_path.append(MyCustomFinder)
我们在 importhook
中采取的一个主要设计决策是包装/覆盖 sys.meta_path
。这意味着 importhook
将继续按预期工作,不管对 sys.meta_path
的任何其他修改。
但是有一个限制,如果您执行 sys.meta_path = [MyCustomFinder] + sys.meta_path
,则 sys.meta_path
将被转换回一个 list
。对 sys.meta_path
中查找器的现有修改将继续按预期工作,但添加的新查找器将不会被钩子。
项目详情
下载文件
下载您平台所需的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
importhook-1.0.9.tar.gz (6.3 kB 查看哈希值)
构建分布
importhook-1.0.9-py3-none-any.whl (7.9 kB 查看哈希值)
关闭
importhook-1.0.9.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 635ad367225fa022221025545c167b09d09ada671821b6e587df0d5ae4bf0aab |
|
MD5 | a48f163a2aa6d5234554d1310794c2d0 |
|
BLAKE2b-256 | da20ba0146cefd926dd6bff3657418b467a3c227af6b4a9c2e1b5fc68d8a1deb |
关闭
importhook-1.0.9-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 64500997b59abf054ddd5037c5133879a4b3ee2091370b46af30befd0be331c1 |
|
MD5 | 0008f897bc40bf5dece771ff012010b0 |
|
BLAKE2b-256 | 4276e833efe967ee1e18a54ce6a2e8e58d351c2844fec3afeedb5ea368406f67 |