Python/Dill序列化哈希取决于导入的包?

Python/Dill序列化哈希取决于导入的包?,python,dill,Python,Dill,考虑以下代码: 从os.path导入联接 进口莳萝 从tempfile导入临时目录 导入hashlib def filehash(路径): 打开(路径“rb”)作为f: 返回hashlib.sha256(f.read()).hexdigest() def func(a、b): 返回a+b 使用TemporaryDirectory()作为td: 温度=连接(td,“功能tmp”) 打开(温度,“wb”)作为f: 模拟转储(函数,f) 打印(文件哈希(临时)) 这会将一个简单函数func()序列化

考虑以下代码:

从os.path导入联接
进口莳萝
从tempfile导入临时目录
导入hashlib
def filehash(路径):
打开(路径“rb”)作为f:
返回hashlib.sha256(f.read()).hexdigest()
def func(a、b):
返回a+b
使用TemporaryDirectory()作为td:
温度=连接(td,“功能tmp”)
打开(温度,“wb”)作为f:
模拟转储(函数,f)
打印(文件哈希(临时))
这会将一个简单函数
func()
序列化到磁盘,然后打印结果文件的哈希值

现在,在第一行之前添加一些不会使用的包的导入语句,例如,
import numpy
,然后再次执行整个程序。现在文件哈希不同了


有人能告诉我为什么吗?

当Dill pickle一个函数时,它必须保存该函数可以访问的范围。因此,当您添加导入时,保存的内容也会发生更改,因为它包括导入更改的模块范围

如果您不想这样做,我建议您将要演示的函数放在它们自己的模块中。这样他们的模块范围就不会包含任何他们不需要访问的内容

我还建议不要依赖相同的代码生成相同的dill