当对象被序列化时,有没有办法删除python中不需要的导入

2024-03-29 07:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有a.py

import tensorflow as tf
class A:
    name = "Class A"

dump.py

import pickle
from a import A

a = A()

with open("a.pickled", "wb") as f:
    f.write(pickle.dump(a))

load.py

import pickle
with open("a.pickled", "rb") as f:
    a = pickle.load(f.read())

当pythonpickles调用对象a时,它实际上也会拉入tensorflow。因此,当对象在load.py中被反序列化时,它导入tensorflow,并带来大量与tensorflow相关的昂贵初始化。我想知道我们是否可以在dump.py中删除不需要的tensorflow 导入而不修改a.py

我在dumpy.py中尝试了类似的方法,但这对我不起作用:

import pickle
from a import A
# Delete tensorflow related import from cache 
import sys
names = [name for name in sys.modules.keys() if "tensorflow" in name]
for name in names:
    del sys.modules[name]

a = A()

with open("a.pickled", "wb") as f:
    f.write(pickle.dump(a))