导入后任意修改导入一个python模块

Arbitrarily modify and import a python module after importing

首先,我使用 importlib 修改导入并试图找到修改导入文件的解决方案。 我看到一个 建议你可以使用这段代码

任意修改导入的模块
def modify_and_import(module_name, package):
    spec = importlib.util.find_spec(module_name, package)
    source = spec.loader.get_source(module_name)
    new_source = tokens.tokenize(source)
    module = importlib.util.module_from_spec(spec)
    codeobj = compile(new_source, module.__spec__.origin, 'exec')
    exec(codeobj, module.__dict__)
    sys.modules[module_name] = module
    return module

现在我运行它用下面的调用

o = modify_and_import('o', "./o.xran")

但是,运行 它通过 exec 给了我以下错误

AttributeError: 'NoneType' object has no attribute 'loader'

然后我尝试打印 'spec' 但得到 None 所以,我认为规范正在返回,而名为 o.xran 的文件存在。

兄弟,在文本编辑器中打开修改后的模块,在打开项目的同一 window 中,然后在项目中使用导入它,'from import *'..希望它能工作..谢谢

好的,一天后我终于让它工作了,因为我只处理本地文件,所以我根本不需要使用 imp。这是我的最终代码

with open(module_name) as f:
  source = f.read()
source = tokens.tokenize(source)
module = types.ModuleType(module_name)
exec(source, module.__dict__)
sys.modules[module_name] = module
return module

感谢任何回答或尝试做出贡献的人。