覆盖 SCons 缓存复制函数

Overriding SCons Cache Copy Function

我正在尝试弄清楚当 SCons 将工件从缓存目录(由 CacheDir 提供)复制到使用的硬链接时如何覆盖行为。

我目前的尝试

def link_or_copy_file(class_instance, src, dst):
    # do hardlinking instead...

SCons.Defaults.DefaultEnvironment()._copy_from_cache = link_or_copy_file
SCons.Defaults.DefaultEnvironment()._copy2_from_cache = link_or_copy_file

env = Environment()

env._copy_from_cache = link_or_copy_file
env._copy2_from_cache = link_or_copy_file

env的后续使用没有影响。永远不会调用函数 link_or_copy_file。怎么了?

难道不能用这种方式重写 Python class 成员函数吗?

Update:另请注意,我在调用 env.Decider() 之后执行此操作,因为此函数可能会覆盖成员 _copy_from_cache_copy2_from_cache.

我们终于弄明白了

import SCons.Environment
SCons.Environment.Environment._copy_from_cache = link_or_copy_file
SCons.Environment.Environment._copy2_from_cache = link_or_copy_file

成功了。